diff --git a/ATTRIBUTION.md b/ATTRIBUTION.md index 46b789a8..cfcdbf06 100644 --- a/ATTRIBUTION.md +++ b/ATTRIBUTION.md @@ -40,3 +40,9 @@ egui's default fonts (compiled into the `egui`/`epaint` crates) keep their own l | Asset | Author | Source | Licence | Use | |---|---|---|---|---| | `epaint_default_fonts::EGUI_ICONS`, `epaint_default_fonts::EMOJI_ICON` (dependency font inputs) | John Slegers | [egui 6d518fc7](https://github.com/storytold/egui/tree/6d518fc799681571963842f95b55a6b68431b15a/crates/epaint_default_fonts/fonts), [emoji-icon-font](https://github.com/jslegers/emoji-icon-font) | MIT (Copyright (c) 2014 John Slegers; full upstream text in `NOTICE`) | egui-icons.ttf is the five-glyph subset, included by default_fonts independently of monochrome_emoji_fonts; emoji-icon-font.ttf is the full monochrome fallback. Dependency assets unmodified here; no font file copied into this repository. | + +## Arabic interface catalog + +| Path | Contributor | Source | Licence | Review | +|---|---|---|---|---| +| `crates/ui-egui/locales/ar.toml` | @hussain-hz with OpenAI Codex (AI-assisted) | Original Arabic wording from FigCraft's English catalog and engine command labels; no proprietary localisation consulted | MIT OR Apache-2.0 | Draft; native-speaker review and maintainer approval pending | diff --git a/ROADMAP.md b/ROADMAP.md index 86194b1d..129c21de 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -2,7 +2,7 @@ **Stage: alpha** · next: beta, ~26 points and ~162–292 h away (one Opus 5.5 agent; ~33–67 h wall-clock with 5 agents) -> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-28 · **Change:** minor (scaled instances keep their scale when their main is rebuilt (#922); .fig embedded images are copied once per blob, not once per hash (#1059); page ruler guides survive save and reopen (#1476); colour picker LCH and OKLCH models; non-ASCII layer names transliterate in code export (#1235); branches in live sessions and branch history entries, gap 17; plugin widgets take text input and a property menu (plugin API 4); boards: templates and tables; boards: a shared timer and voting sessions; boards: the dot grid, connector ends dragged to re-attach, curved connectors; Installed weights of an embedded font family (#1246); `.sketch` import, best effort (Sketch 48 and newer); CJK line breaking: JIS X 4051's line-start and line-end sets completed with the halfwidth small kana, the halfwidth and spacing (semi-)voiced sound marks, the iteration marks 〱–〵 and the halfwidth parentheses, with behaviour cases for each; Adobe Fonts found on macOS (#298); egui 0.37 hidden-capture deadline contract; Dev Mode measurements kept on the canvas and a read-only layers panel; boards: a board area row and progress entry; community fixes in #507, #510, #529 and #530: auto-save, a text box by dragging, batch step references, removing someone from a live session, Russian and Turkish catalogs reviewed, Czech and Indonesian drafts, the Japanese draft completed, zoom previews, the web clipboard, Alt-drag snapping and Cmd+D repeat, recovery copies, crash and rollback fixes, colour emoji, `.fig` import fixes; earlier changes are in the revision history below) · **Target:** Figma Design (desktop app 126.10.7) +> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-28 · **Change:** minor (Arabic draft catalog; scaled instances keep their scale when their main is rebuilt (#922); .fig embedded images are copied once per blob, not once per hash (#1059); page ruler guides survive save and reopen (#1476); colour picker LCH and OKLCH models; non-ASCII layer names transliterate in code export (#1235); branches in live sessions and branch history entries, gap 17; plugin widgets take text input and a property menu (plugin API 4); boards: templates and tables; boards: a shared timer and voting sessions; boards: the dot grid, connector ends dragged to re-attach, curved connectors; Installed weights of an embedded font family (#1246); `.sketch` import, best effort (Sketch 48 and newer); CJK line breaking: JIS X 4051's line-start and line-end sets completed with the halfwidth small kana, the halfwidth and spacing (semi-)voiced sound marks, the iteration marks 〱–〵 and the halfwidth parentheses, with behaviour cases for each; Adobe Fonts found on macOS (#298); egui 0.37 hidden-capture deadline contract; Dev Mode measurements kept on the canvas and a read-only layers panel; boards: a board area row and progress entry; community fixes in #507, #510, #529 and #530: auto-save, a text box by dragging, batch step references, removing someone from a live session, Russian and Turkish catalogs reviewed, Czech and Indonesian drafts, the Japanese draft completed, zoom previews, the web clipboard, Alt-drag snapping and Cmd+D repeat, recovery copies, crash and rollback fixes, colour emoji, `.fig` import fixes; earlier changes are in the revision history below) · **Target:** Figma Design (desktop app 126.10.7) FigCraft is a clean-room, open-source, pure-Rust reimplementation of the Figma design workflow, native on macOS, Windows, Linux and FreeBSD and in the browser, fully drivable by agents through @@ -63,7 +63,7 @@ native speakers' reviews of the nine language drafts need people. | Stability | 55% | 20–40 | [gaps](docs/gaps.md) | | Performance | 60% | 30–60 | [hardware-parity](docs/hardware-parity.md) | | Hardware | 60% | 10–21 | [hardware-parity](docs/hardware-parity.md) | -| Localization | 39% (layer; English; Russian and Turkish reviewed by native speakers; Spanish with a Latin American overlay, French, German, Brazilian Portuguese, Japanese, Korean, Simplified Chinese, Indonesian and Czech drafts; CJK UI fonts) | 29–51 | [localization-parity](docs/localization-parity.md) | +| Localization | 39% (layer; English; Russian and Turkish reviewed by native speakers; Spanish with a Latin American overlay, French, German, Brazilian Portuguese, Japanese, Korean, Simplified Chinese, Indonesian and Czech drafts; CJK UI fonts); Arabic draft: 2,508 entries, native review and panel mirroring pending | 29–51 | [localization-parity](docs/localization-parity.md) | | Platforms | 75% | 10–20 | [hardware-parity](docs/hardware-parity.md) | | Ecosystem / plugins | 40% (own WASM plugins with panels, settings and widgets that take clicks, text and a property menu; a self-hosted plugin directory) | 6–22 | [gaps](docs/gaps.md) | | AI features | 0% | 30–60 | [gaps](docs/gaps.md) | @@ -103,7 +103,7 @@ native speakers' reviews of the nine language drafts need people. | Simplified Chinese | zh-Hans | 95% | draft (needs native review) | | Spanish | es, es-419 | 100% (es-419: an overlay of 101 entries) | draft (needs native review) | | Hindi | hi | 0% | none | -| Arabic | ar | 0% | none | +| Arabic | ar | 2,508 / 2,508 entries (100%, counted 2026-10-28) | draft; native review and panel mirroring pending | | French | fr | 95% | draft (needs native review) | | Portuguese (Brazil) | pt-BR | 95% | draft (needs native review) | | Indonesian | id | 99% | draft (needs native review) | @@ -114,7 +114,7 @@ native speakers' reviews of the nine language drafts need people. Percentages measured 2026-10-17 over 2,272 entries (strings added since a draft show English). Also shipped: Russian (`ru`, 99%, reviewed by VanTan), Swedish (`sv`, 99.6%, command labels since 2026-10-17; native review welcome), Turkish (`tr`, 99%) and Czech (`cs`, 99%, draft). Figma ships English, Japanese, Korean, French, German, Spanish and Portuguese (Brazil); FigCraft has the localization layer, English and Spanish (Spain and Latin America), -French, German, Brazilian Portuguese, Japanese, Korean, Simplified Chinese, Indonesian and Vietnamese drafts (Preferences ▸ +French, German, Brazilian Portuguese, Japanese, Korean, Simplified Chinese, Indonesian, Vietnamese and Arabic drafts (Preferences ▸ Language; Traditional Chinese has no catalog; CJK UI text uses an installed CJK font, loaded only when needed; adding a language: [`docs/translating.md`](docs/translating.md)). Document text in any script (bidi, Arabic shaping, @@ -127,7 +127,7 @@ Ranked; detail and milestones in [`docs/roadmap.md`](docs/roadmap.md). 1. `.fig` import's tail: fixes from real files, connector labels, table cells, filled areas with their own fills (the best-effort import, editable vector networks, the other layer kinds and variable prototype actions landed 2026-10-11): 5–10 h; then checking the rest of the experimental `.fig` export (landed 2026-10-12; written files open and draw in other software) on effects, images, prototypes and real files: 5–15 h. 2. Real-file corpus and measured fidelity: 15–30 h. 3. Tool-by-tool interaction pass against Figma: 40–60 h. -4. Languages: native reviews of the es (with es-419), fr, de, pt-BR, ja, ko, zh-Hans, id and cs drafts (people), the entries added since each catalog was written, then Hindi, Vietnamese and Arabic ([localization-parity](docs/localization-parity.md)). +4. Languages: native reviews of the es (with es-419), fr, de, pt-BR, ja, ko, zh-Hans, id and cs drafts (people), the entries added since each catalog was written, then Hindi and Vietnamese; Arabic native review and panel mirroring ([localization-parity](docs/localization-parity.md)). 5. Multiplayer (M9): accounts and teams on top of the live sessions and the standalone server (transport, hosting, invite links that open the app, document sync, presence with remote text carets, cursor chat and spotlight, per-user undo, reconnect with offline edits, collision-free ids for styles, variables and comments, the browser client, `figcraft-server` with persistence and share links to edit or view, team libraries on the server landed): 42–84 h. ## Progress log @@ -351,6 +351,7 @@ Ranked; detail and milestones in [`docs/roadmap.md`](docs/roadmap.md). | Date | Change | Summary | |---|---|---| +| 2026-10-28 | minor | Arabic draft: 1,857 UI strings, 620 command labels, 31 menu wordings; count-neutral plurals and web font gate. Native review and panel mirroring remain open; grade and estimates unchanged. Evidence: `crates/ui-egui/locales/ar.toml`, i18n catalog tests and [translation notes](docs/translating.md#arabic-draft) | | 2026-10-28 | minor | M3, #922: instances scaled with the Scale tool keep their layers' scaled size and points when their main is rebuilt (`size`/`position` overrides recorded on scale). Numbers unchanged. | | 2026-10-28 | minor | M6, #1059: `.fig` import copies embedded image blobs once per blob, not once per hash naming them. Numbers unchanged. | | 2026-10-28 | minor | M1, #1476: page ruler guides survive save and reopen; files written with a page's `guides` key twice open again with both lists. Numbers unchanged. | diff --git a/crates/ui-egui/locales/ar.toml b/crates/ui-egui/locales/ar.toml new file mode 100644 index 00000000..f252e114 --- /dev/null +++ b/crates/ui-egui/locales/ar.toml @@ -0,0 +1,2528 @@ +# FigCraft interface strings: Arabic (العربية). +# Draft translation from the meaning of FigCraft's English catalog and command labels. +# Contributed by @hussain-hz with OpenAI Codex; not yet reviewed by a native speaker. +# No proprietary localisation tables or translated interfaces were consulted. +# Modern Standard Arabic; product names, keyboard glyphs and placeholders are preserved. +# Count-neutral wording (e.g. "عدد الطبقات: {n}") is deliberate: the current runtime has +# no Arabic zero/two categories. Each English plural entry uses only `other`, correct for +# every integer, without misclassifying Arabic counts or changing other languages' rules. +# Stored in logical Unicode order; panel mirroring remains separate work. +# MIT OR Apache-2.0. See ATTRIBUTION.md and docs/translating.md. + +[meta] +name = "العربية" +status = "draft — needs native review" + +[ui] +"% of all commits" = "% من إجمالي الإيداعات" +"(no longer published)" = "(لم يعد منشورًا)" +"({n} warnings: some entries were skipped)" = { other = "(عدد التحذيرات: {n}؛ تم تخطي بعض الإدخالات)" } +"+ Create variable" = "+ إنشاء متغير" +".fig (experimental)" = ".fig (تجريبي)" +"1…9, 0" = "1…9, 0" +"@{login}: {prs} PRs, {commits} commits, +{added} / −{deleted} lines (Δ {delta}), +{bin_added} / −{bin_deleted} binary assets, {first} – {last}" = "@{login}: طلبات السحب: {prs}، الإيداعات: {commits}، +{added} / −{deleted} سطر (Δ {delta})، +{bin_added} / −{bin_deleted} أصل ثنائي، {first} – {last}" +"A collection of this file with these modes and variables: override their values per mode and add variables of its own" = "مجموعة من هذا الملف بأوضاعها ومتغيراتها: تجاوز قيمها لكل وضع وأضف متغيرات خاصة بها" +"A .figcraft file with this name already exists. Choose its full name to confirm replacement." = "يوجد ملف .figcraft بهذا الاسم. اختر اسمه الكامل لتأكيد الاستبدال." +"A layer on its own aligns to its frame: select more layers, or one in a frame" = "تُحاذى الطبقة المنفردة مع إطارها: حدد عدة طبقات أو طبقة داخل إطار" +"A responsive product page: hero, features, figures, a quote and a footer" = "صفحة منتج متجاوبة: قسم رئيسي ومزايا وأرقام واقتباس وتذييل" +"A spring plays until it settles: its mass, stiffness and damping set how long" = "تستمر حركة النابض حتى يستقر؛ وتحدد كتلته وصلابته وتخميده مدتها" +"A title, an agenda, a big figure, a chart and a closing slide" = "عنوان وجدول أعمال ورقم بارز ومخطط وشريحة ختامية" +"A to Z" = "من A إلى Z" +"About" = "حول" +"About FigCraft" = "حول FigCraft" +"About this server" = "حول هذا الخادم" +"Action" = "إجراء" +"Actions" = "الإجراءات" +"Actions for {name}" = "إجراءات {name}" +"Actions…" = "الإجراءات…" +"Active" = "نشط" +"Actual size (100%)" = "الحجم الفعلي (100%)" +"Add a category" = "إضافة فئة" +"Add a comment" = "إضافة تعليق" +"Add a description" = "إضافة وصف" +"Add a frame (F) or a shape (R) to get started" = "أضف إطارًا (F) أو شكلًا (R) للبدء" +"Add a layer or component to tile first" = "أضف طبقة أو مكوّنًا أولًا لتكراره بنمط متجاور" +"Add a minute" = "إضافة دقيقة" +"Add a note for developers" = "إضافة ملاحظة للمطورين" +"Add action" = "إضافة إجراء" +"Add actions for when no condition holds" = "إضافة إجراءات عند عدم تحقق أي شرط" +"Add an annotation for developers" = "إضافة تعليق توضيحي للمطورين" +"Add another condition" = "إضافة شرط آخر" +"Add auto layout" = "إضافة تخطيط تلقائي" +"Add background behind overlay" = "إضافة خلفية وراء الطبقة العائمة" +"Add column" = "إضافة عمود" +"Add content to this slot" = "إضافة محتوى إلى هذه الخانة" +"Add dev resource" = "إضافة مورد للمطور" +"Add effect" = "إضافة تأثير" +"Add export setting" = "إضافة إعداد تصدير" +"Add fill" = "إضافة تعبئة" +"Add interaction" = "إضافة تفاعل" +"Add layout grid" = "إضافة شبكة تخطيط" +"Add library" = "إضافة مكتبة" +"Add library file…" = "إضافة ملف مكتبة…" +"Add max height" = "إضافة حد أقصى للارتفاع" +"Add max width" = "إضافة حد أقصى للعرض" +"Add measurement" = "إضافة قياس" +"Add min height" = "إضافة حد أدنى للارتفاع" +"Add min width" = "إضافة حد أدنى للعرض" +"Add mode" = "إضافة وضع" +"Add new page" = "إضافة صفحة جديدة" +"Add or update collections from a variables JSON" = "إضافة مجموعات أو تحديثها من ملف JSON للمتغيرات" +"Add properties to make instances configurable" = "أضف خصائص لتتيح ضبط النسخ المثيلة" +"Add reaction" = "إضافة تفاعل تعبيري" +"Add row" = "إضافة صف" +"Add starting point" = "إضافة نقطة بداية" +"Add stroke" = "إضافة حد خارجي" +"Add variant" = "إضافة تنويعة" +"Add variant with a new value" = "إضافة تنويعة بقيمة جديدة" +"Added" = "تمت الإضافة" +"Added the library \"{name}\"" = "أُضيفت المكتبة «{name}»" +"Adding to {name}" = "جارٍ الإضافة إلى {name}" +"Adjust" = "ضبط" +"Adjustment presets" = "إعدادات الضبط المسبقة" +"Advanced" = "متقدم" +"Advanced stroke" = "إعدادات متقدمة للحد الخارجي" +"After delay" = "بعد تأخير" +"After delay {ms}ms" = "بعد تأخير {ms} مللي ثانية" +"Align" = "محاذاة" +"Align bottom" = "محاذاة لأسفل" +"Align center" = "محاذاة للوسط أفقيًا" +"Align horizontal centers" = "محاذاة المراكز الأفقية" +"Align left" = "محاذاة لليسار" +"Align middle" = "محاذاة للوسط رأسيًا" +"Align right" = "محاذاة لليمين" +"Align text baselines" = "محاذاة خطوط أساس النص" +"Align top" = "محاذاة لأعلى" +"Align vertical centers" = "محاذاة المراكز الرأسية" +"Alignment" = "المحاذاة" +"All" = "الكل" +"All categories" = "جميع الفئات" +"All comments" = "جميع التعليقات" +"All components" = "جميع المكونات" +"All fonts" = "جميع الخطوط" +"All objects" = "جميع الكائنات" +"All supported properties" = "جميع الخصائص المدعومة" +"All the fonts this file uses are installed" = "جميع الخطوط المستخدمة في هذا الملف مثبتة" +"All variables" = "جميع المتغيرات" +"Along the bottom" = "على طول الأسفل" +"Along the left" = "على طول اليسار" +"Along the right" = "على طول اليمين" +"Along the top" = "على طول الأعلى" +"Alpha" = "ألفا" +"Alphabetical" = "أبجدي" +"Alt+drag" = "Alt+سحب" +"An analytics screen on a grid: figures, charts drawn from vectors and a table" = "شاشة تحليلات شبكية: أرقام ومخططات مرسومة بمتجهات وجدول" +"An invite link that opens FigCraft and joins" = "رابط دعوة يفتح FigCraft وينضم إلى الجلسة" +"Anchor" = "مرساة" +"Android" = "Android" +"Android Vector Drawable" = "Android Vector Drawable" +"Angular" = "زاوي" +"Animation" = "التحريك" +"Annotations" = "التعليقات التوضيحية" +"Annotations shown on the canvas" = "التعليقات التوضيحية المعروضة على لوحة الرسم" +"Another server, or one that needs its key. The usual server is set in Preferences." = "خادم آخر أو خادم يتطلب مفتاحه. يُحدد الخادم المعتاد في التفضيلات." +"Any status" = "أي حالة" +"Anyone on your network with this code can edit the file, while this app stays open." = "يمكن لأي شخص على شبكتك يحمل هذا الرمز تحرير الملف ما دام التطبيق مفتوحًا." +"Anyone with the edit link can change the file; the view link only lets people look. The links carry their secrets: share them like passwords. `figcraft-server links` makes more and revokes them." = "يتيح رابط التحرير تغيير الملف، ويتيح رابط العرض الاطلاع عليه فقط. تتضمن الروابط مفاتيحها السرية؛ شاركها ككلمات المرور. يُنشئ `figcraft-server links` روابط أخرى ويلغيها." +"Anyone with this code can edit the file." = "يمكن لأي شخص يحمل هذا الرمز تحرير الملف." +"Anyone with this code can look at the file, not change it." = "يمكن لأي شخص يحمل هذا الرمز عرض الملف دون تغييره." +"Appearance" = "المظهر" +"Apply a component property" = "تطبيق خاصية مكوّن" +"Apply variable" = "تطبيق متغير" +"Apply variable to text" = "تطبيق متغير على النص" +"Apply variable to visibility" = "تطبيق متغير على الظهور" +"Apps" = "التطبيقات" +"Apr" = "أبريل" +"Arc" = "قوس" +"Arc ratio" = "نسبة القوس" +"Arc start" = "بداية القوس" +"Arc sweep" = "امتداد القوس" +"Archive" = "أرشفة" +"Archived" = "مؤرشف" +"Arrange" = "ترتيب" +"Arrow" = "سهم" +"Arrow at the end" = "سهم عند النهاية" +"As typed" = "كما أُدخل" +"Asking the server…" = "جارٍ الاستعلام من الخادم…" +"Assets" = "الأصول" +"Aug" = "أغسطس" +"Auto" = "تلقائي" +"Auto (space around)" = "تلقائي (مسافة حول العناصر)" +"Auto (space between)" = "تلقائي (مسافة بين العناصر)" +"Auto (space evenly)" = "تلقائي (مسافات متساوية)" +"Auto ({mode})" = "تلقائي ({mode})" +"Auto columns" = "أعمدة تلقائية" +"Auto gap" = "فاصل تلقائي" +"Auto height" = "ارتفاع تلقائي" +"Auto layout" = "تخطيط تلقائي" +"Auto rows" = "صفوف تلقائية" +"Auto width" = "عرض تلقائي" +"Back to the FigCraft server" = "العودة إلى خادم FigCraft" +"Back to the font's value" = "العودة إلى قيمة الخط" +"Back" = "رجوع" +"Back to Ready for dev" = "العودة إلى حالة جاهز للتطوير" +"Back to Ready for dev: the next change compares with how it is now" = "العودة إلى جاهز للتطوير: ستُقارن التغييرات القادمة بالحالة الحالية" +"Back to assets" = "العودة إلى الأصول" +"Back to current" = "العودة إلى الحالي" +"Back to styles" = "العودة إلى الأنماط" +"Back to the canvas from a focused region" = "العودة إلى لوحة الرسم من المنطقة المركّز عليها" +"Back to the current version" = "العودة إلى الإصدار الحالي" +"Back to the values the font style implies" = "العودة إلى القيم التي يحددها نمط الخط" +"Background" = "الخلفية" +"Background blur" = "تمويه الخلفية" +"Basics" = "الأساسيات" +"Before" = "قبل" +"Bend" = "ثني" +"Best effort" = "أفضل محاولة ممكنة" +"Between the selected layers" = "بين الطبقات المحددة" +"Bevel" = "شطف" +"Binary assets added" = "الأصول الثنائية المضافة" +"Binary assets removed" = "الأصول الثنائية المحذوفة" +"Black & white" = "أبيض وأسود" +"Bleed" = "نزف الطباعة" +"Bleed marks" = "علامات نزف الطباعة" +"Bleed marks need a bleed" = "تتطلب علامات النزف هوامش نزف" +"Blend" = "مزج" +"Blend mode" = "وضع المزج" +"Blue" = "أزرق" +"Blur" = "تمويه" +"Boolean" = "منطقي" +"Boolean groups" = "المجموعات المنطقية" +"Both directions" = "كلا الاتجاهين" +"Bottom" = "أسفل" +"Bottom left radius" = "نصف قطر الزاوية السفلية اليسرى" +"Bottom padding" = "الحشو السفلي" +"Bottom right radius" = "نصف قطر الزاوية السفلية اليمنى" +"Brainstorm" = "عصف ذهني" +"Branch" = "فرع" +"Branch archived" = "أُرشف الفرع" +"Branch merged" = "دُمج الفرع" +"Branch name" = "اسم الفرع" +"Branch of {file}" = "فرع من {file}" +"Branch of {file} · merged or archived" = "فرع من {file} · مدمج أو مؤرشف" +"Branch updated from main" = "حُدّث الفرع من الملف الرئيسي" +"Branch {name}" = "الفرع {name}" +"Branches" = "الفروع" +"Bound to {name}. Click to detach the variable." = "مرتبط بـ {name}. انقر لفصل المتغير." +"Bring forward" = "تقديم مستوى واحد" +"Bring the main file's changes into the branch" = "جلب تغييرات الملف الرئيسي إلى الفرع" +"Bring to front" = "إحضار إلى المقدمة" +"Bristle" = "شعيرات" +"Browse" = "استعراض" +"Brush" = "فرشاة" +"Brush rotation jitter" = "عشوائية دوران الفرشاة" +"Brush scatter" = "تناثر الفرشاة" +"Brush size jitter" = "عشوائية حجم الفرشاة" +"Brush spacing" = "تباعد الفرشاة" +"Bulleted list" = "قائمة نقطية" +"C or Shift+C" = "C أو Shift+C" +"C or ⇧C" = "C أو ⇧C" +"CMYK colour" = "لون CMYK" +"Can view" = "يمكنه العرض" +"Check" = "تحقق" +"Check for Updates" = "التحقق من التحديثات" +"Check for updates…" = "التحقق من التحديثات…" +"Checking for updates…" = "جارٍ التحقق من التحديثات…" +"Checking the fonts installed on this computer…" = "جارٍ فحص الخطوط المثبتة على هذا الحاسوب…" +"Checking the server…" = "جارٍ التحقق من الخادم…" +"Chevron" = "شارة زاوية" +"Clear from this list" = "إزالة من هذه القائمة" +"Clear results" = "مسح النتائج" +"Click objects to vote; click your badge to take a vote back" = "انقر على الكائنات للتصويت؛ وانقر على شارتك لسحب صوت" +"Code or invite link" = "رمز أو رابط دعوة" +"Color profile: {name}" = "ملف تعريف اللون: {name}" +"Colour and text styles, Light and Dark variables, buttons, inputs and cards" = "أنماط ألوان ونصوص ومتغيرات فاتحة وداكنة وأزرار وحقول إدخال وبطاقات" +"Compatibility" = "التوافق" +"Connector" = "موصل" +"Convert to frame" = "تحويل إلى إطار" +"Convert to section" = "تحويل إلى قسم" +"CSS custom properties…" = "خصائص CSS المخصصة…" +"Dart constants for Flutter…" = "ثوابت Dart لـ Flutter…" +"Can edit" = "يمكنه التحرير" +"Can't read this library: {e}" = "تعذرت قراءة هذه المكتبة: {e}" +"Cancel" = "إلغاء" +"Canvas" = "لوحة الرسم" +"Canvas stacking" = "تكديس العناصر على لوحة الرسم" +"Cap height to baseline" = "من أعلى الحرف الكبير إلى خط الأساس" +"Case" = "حالة الأحرف" +"Case-sensitive forms" = "أشكال حسب حالة الأحرف" +"Categories" = "الفئات" +"Center" = "الوسط" +"Change alias" = "تغيير الاسم المستعار" +"Change resolved" = "تحديد التغيير كمحلول" +"Change style" = "تغيير النمط" +"Change to" = "تغيير إلى" +"Change to needs a layer inside a variant" = "يتطلب «تغيير إلى» طبقة داخل تنويعة" +"Changed" = "تم التغيير" +"Changed on both sides: keep one" = "تغيّر على الجانبين: احتفظ بأحدهما" +"Changes on main" = "التغييرات في الملف الرئيسي" +"Changes on the branch" = "التغييرات في الفرع" +"Changes unknown" = "التغييرات غير معروفة" +"Choose React, Leptos, Vue, SwiftUI, Compose or ArkUI above to connect this component to its code." = "اختر React أو Leptos أو Vue أو SwiftUI أو Compose أو ArkUI أعلاه لربط هذا المكوّن بكوده." +"Choose another profile to change it." = "اختر ملف تعريف آخر لتغييره." +"Choose collection" = "اختيار مجموعة" +"Choose image" = "اختيار صورة" +"Choose mode" = "اختيار وضع" +"Choose variable" = "اختيار متغير" +"Circle" = "دائرة" +"Clear recent" = "مسح الملفات الأخيرة" +"Click + to replace mixed content" = "انقر على + لاستبدال المحتوى المختلط" +"Click anywhere on the canvas to leave one." = "انقر في أي موضع على لوحة الرسم لإضافة تعليق." +"Click or drag to merge · {alt} removes" = "انقر أو اسحب للدمج · {alt} للإزالة" +"Click or drag to remove · {alt} merges" = "انقر أو اسحب للإزالة · {alt} للدمج" +"Click to record a key" = "انقر لتسجيل مفتاح" +"Clip content" = "قص المحتوى عند الحدود" +"Clip to shape" = "قص وفق الشكل" +"Close" = "إغلاق" +"Close overlay" = "إغلاق الطبقة العائمة" +"Close preview" = "إغلاق المعاينة" +"Close tab" = "إغلاق علامة التبويب" +"Close version history" = "إغلاق سجل الإصدارات" +"Close when clicking outside" = "إغلاق عند النقر خارجها" +"Code" = "الكود" +"Code syntax" = "صياغة الكود" +"Collapse" = "طي" +"Collapse panel" = "طي اللوحة" +"Collection" = "مجموعة" +"Collections" = "المجموعات" +"Color" = "اللون" +"Color burn" = "حرق اللون" +"Color dodge" = "تفتيح اللون" +"Color format" = "تنسيق اللون" +"Color profile" = "ملف تعريف اللون" +"Color styles" = "أنماط الألوان" +"Color values in this file are in this color space." = "تُعبّر قيم الألوان في هذا الملف وفق هذا الفضاء اللوني." +"Color variables" = "متغيرات الألوان" +"Colour" = "اللون" +"Column" = "عمود" +"Column gap" = "الفاصل بين الأعمدة" +"Column sizes" = "أحجام الأعمدة" +"Column span" = "امتداد الأعمدة" +"Columns" = "أعمدة" +"Columns {count}" = "الأعمدة {count}" +"Comment" = "تعليق" +"Comments" = "التعليقات" +"Commits" = "الإيداعات" +"Company" = "الشركة" +"Compare changes" = "مقارنة التغييرات" +"Compare with" = "مقارنة مع" +"Compatibility notes" = "ملاحظات التوافق" +"Completed" = "مكتمل" +"Component" = "مكوّن" +"Component name" = "اسم المكوّن" +"Component property" = "خاصية المكوّن" +"Component set" = "مجموعة مكونات" +"Component sets" = "مجموعات المكونات" +"Components" = "المكونات" +"Conditional" = "شرطي" +"Confetti" = "قصاصات احتفالية" +"Conflicts" = "التعارضات" +"Connect to code" = "ربط بالكود" +"Connected" = "متصل" +"Connected to code: {from}" = "مرتبط بالكود: {from}" +"Connection lost, reconnecting (attempt {attempt})…" = "انقطع الاتصال، جارٍ إعادة الاتصال (المحاولة {attempt})…" +"Constrain proportions" = "الحفاظ على النسب" +"Constraints" = "القيود" +"Content" = "المحتوى" +"Contents hidden" = "المحتويات مخفية" +"Contextual alternates" = "بدائل سياقية" +"Contrast" = "التباين" +"Contributors" = "المساهمون" +"Contributors: {people} · Commits: {commits}" = "المساهمون: {people} · الإيداعات: {commits}" +"Controller" = "وحدة تحكم" +"Cool" = "بارد" +"Copied as CSS" = "نُسخ بصيغة CSS" +"Copied as PNG" = "نُسخ بصيغة PNG" +"Copied as SVG" = "نُسخ بصيغة SVG" +"Copied as text" = "نُسخ كنص" +"Copied {value}" = "نُسخ {value}" +"Copy" = "نسخ" +"Copy as" = "نسخ بصيغة" +"Copy as CSS" = "نسخ بصيغة CSS" +"Copy as PNG" = "نسخ بصيغة PNG" +"Copy as SVG" = "نسخ بصيغة SVG" +"Copy code" = "نسخ الكود" +"Copy effect" = "نسخ التأثير" +"Copy fill" = "نسخ التعبئة" +"Copy link" = "نسخ الرابط" +"Copy stroke" = "نسخ الحد الخارجي" +"Copy the {label}" = "نسخ {label}" +"Copy {value}" = "نسخ {value}" +"Corner radius" = "نصف قطر الزوايا" +"Corner smoothing" = "تنعيم الزوايا" +"Could not check for updates:\n{error}" = "تعذر التحقق من التحديثات:\n{error}" +"Couldn't download the variables" = "تعذر تنزيل المتغيرات" +"Couldn't download {name}" = "تعذر تنزيل {name}" +"Couldn't reach {server}: showing what this computer remembers." = "تعذر الاتصال بـ {server}؛ تُعرض البيانات المحفوظة على هذا الحاسوب." +"Couldn't read {name}." = "تعذرت قراءة {name}." +"Couldn't save automatically: {error}" = "تعذر الحفظ التلقائي: {error}" +"Couldn't save the file" = "تعذر حفظ الملف" +"Count" = "العدد" +"Create" = "إنشاء" +"Create a variable collection first" = "أنشئ مجموعة متغيرات أولًا" +"Create a variable first" = "أنشئ متغيرًا أولًا" +"Create alias" = "إنشاء اسم مستعار" +"Create branch" = "إنشاء فرع" +"Create collection" = "إنشاء مجموعة" +"Create component" = "إنشاء مكوّن" +"Create component property" = "إنشاء خاصية مكوّن" +"Create components, styles or variables to publish them as a library." = "أنشئ مكونات أو أنماطًا أو متغيرات لنشرها كمكتبة." +"Create property…" = "إنشاء خاصية…" +"Create style" = "إنشاء نمط" +"Create style from the selected text" = "إنشاء نمط من النص المحدد" +"Created" = "أُنشئ" +"Crop" = "اقتصاص" +"Crop marks" = "علامات الاقتصاص" +"Ctrl+arrows" = "Ctrl+الأسهم" +"Ctrl+click" = "Ctrl+نقر" +"Ctrl+scroll" = "Ctrl+تمرير" +"Current name" = "الاسم الحالي" +"Current version" = "الإصدار الحالي" +"Cursor chat" = "دردشة المؤشر" +"Custom" = "مخصص" +"Custom size" = "حجم مخصص" +"Cut" = "قص" +"Dark" = "داكن" +"Darken" = "تعتيم" +"Dash" = "شرطة" +"Dashboard" = "لوحة المعلومات" +"Date created" = "تاريخ الإنشاء" +"Dec" = "ديسمبر" +"Decoration style" = "نمط زخرفة النص" +"Decoration" = "زخرفة النص" +"Deep select" = "تحديد عميق" +"Default" = "افتراضي" +"Default content" = "المحتوى الافتراضي" +"Default value (the top-left variant)" = "القيمة الافتراضية (التنويعة في أعلى اليسار)" +"Delay" = "تأخير" +"Delete" = "حذف" +"Delete category (its annotations stay)" = "حذف الفئة (تبقى تعليقاتها التوضيحية)" +"Delete collection" = "حذف المجموعة" +"Delete group" = "حذف مجموعة العناصر" +"Delete mode" = "حذف الوضع" +"Delete page" = "حذف الصفحة" +"Delete preset" = "حذف الإعداد المسبق" +"Delete property" = "حذف الخاصية" +"Delete the style (layers keep their values)" = "حذف النمط (تحتفظ الطبقات بقيمها)" +"Delete thread" = "حذف سلسلة التعليقات" +"Delete variable" = "حذف المتغير" +"Delete “{name}”? This can't be undone." = "هل تريد حذف «{name}»؟ لا يمكن التراجع عن ذلك." +"Density" = "الكثافة" +"Depth" = "العمق" +"Describe how and when to use this component" = "صِف كيفية استخدام هذا المكوّن ومتى يُستخدم" +"Describe what changed" = "صِف ما تغير" +"Description" = "الوصف" +"Description (optional)" = "الوصف (اختياري)" +"Design" = "التصميم" +"Design panel" = "لوحة التصميم" +"Design system starter" = "نقطة بدء لنظام تصميم" +"Desktop" = "سطح المكتب" +"Destination" = "الوجهة" +"Detach alias" = "فصل الاسم المستعار" +"Detach instance" = "فصل النسخة المثيلة" +"Detach property" = "فصل الخاصية" +"Detach style" = "فصل النمط" +"Detach styles" = "فصل الأنماط" +"Detach variable" = "فصل المتغير" +"Details" = "التفاصيل" +"Dev Mode" = "وضع المطور" +"Dev Mode only inspects: switch to Design (Shift+D) to edit" = "وضع المطور للفحص فقط؛ انتقل إلى التصميم (Shift+D) للتحرير" +"Dev resources" = "موارد المطورين" +"Development" = "التطوير" +"Device" = "الجهاز" +"Device at 100%" = "الجهاز بحجم 100%" +"Diamond" = "مُعيّن" +"Difference" = "الفرق" +"Dimensions" = "الأبعاد" +"Direction" = "الاتجاه" +"Disconnect from code" = "فصل الربط بالكود" +"Dispersion" = "التشتت" +"Display name" = "اسم العرض" +"Dissolve" = "تلاشٍ" +"Distribute and tidy" = "توزيع وترتيب" +"Distribute horizontal spacing" = "توزيع المسافات الأفقية" +"Distribute vertical spacing" = "توزيع المسافات الرأسية" +"Divider" = "فاصل" +"Don't Save" = "عدم الحفظ" +"Don't show this again" = "عدم إظهار هذا مجددًا" +"Don't truncate" = "عدم اختصار النص" +"Done" = "تم" +"Done editing" = "إنهاء التحرير" +"Dots" = "نقاط" +"Dotted" = "منقّط" +"Down" = "لأسفل" +"Drafts" = "المسودات" +"Drag the stroke to add a width point" = "اسحب الحد الخارجي لإضافة نقطة عرض" +"Draw" = "رسم" +"Draw a frame" = "رسم إطار" +"Drawing tools" = "أدوات الرسم" +"Drop a .figcraft, .fig, .sketch, .json, .svg or image file." = "أفلت ملف .figcraft أو .fig أو .sketch أو .json أو .svg أو ملف صورة." +"Drop to import" = "أفلت للاستيراد" +"Drop to open" = "أفلت للفتح" +"Drop shadow" = "ظل خارجي" +"Dual-licensed MIT OR Apache-2.0. Made by the ArtCraft team and community." = "مرخّص بموجب MIT أو Apache-2.0. من تطوير فريق ArtCraft والمجتمع." +"Duo" = "ثنائي" +"Duplicate" = "تكرار" +"Duplicate by dragging" = "تكرار بالسحب" +"Duplicate mode" = "تكرار الوضع" +"Duplicate page" = "تكرار الصفحة" +"Edit" = "تحرير" +"Edit as an expression" = "تحرير كتعبير" +"Edit colour" = "تحرير اللون" +"Edit comment" = "تحرير التعليق" +"Edit dev resource" = "تحرير مورد المطور" +"Edit link" = "رابط التحرير" +"Edit link copied" = "نُسخ رابط التحرير" +"Edit style" = "تحرير النمط" +"Edit variable" = "تحرير المتغير" +"Edit with the builder" = "تحرير باستخدام أداة البناء" +"Edited {when}" = "عُدّل {when}" +"Effect settings" = "إعدادات التأثير" +"Effect styles" = "أنماط التأثيرات" +"Effects" = "التأثيرات" +"Curved" = "منحني" +"Elbow" = "بزاوية قائمة" +"Ellipse" = "شكل بيضاوي" +"Ellipses" = "أشكال بيضاوية" +"Else" = "وإلا" +"Else if" = "وإلا إذا" +"Embedded profile" = "ملف تعريف مضمّن" +"Empty" = "فارغ" +"End" = "النهاية" +"End point" = "نقطة النهاية" +"End vote" = "إنهاء التصويت" +"Ends the session; everyone keeps their copy" = "ينهي الجلسة؛ ويحتفظ الجميع بنسخهم" +"Enter" = "Enter" +"Enter the address of a figcraft-server and press Browse to see the plugins it offers." = "أدخل عنوان خادم figcraft-server واضغط على «استعراض» لعرض إضافاته." +"Enter to save · Esc to cancel" = "Enter للحفظ · Esc للإلغاء" +"Eraser" = "ممحاة" +"Esc" = "Esc" +"Essential" = "أساسي" +"Every conflict has a choice." = "اختير حل لكل تعارض." +"Every top-level frame already starts a flow" = "كل إطار من المستوى الأعلى يبدأ تدفقًا بالفعل" +"Exact only" = "تطابق تام فقط" +"Exact opacity (4 then 5: 45%)" = "عتامة دقيقة (4 ثم 5: 45%)" +"Exclude" = "استبعاد" +"Excluded" = "مستبعد" +"Excluded from layout" = "مستبعد من التخطيط" +"Excludes" = "يستبعد" +"Exclusion" = "استثناء" +"Exit focus view (Esc)" = "الخروج من عرض التركيز (Esc)" +"Expand" = "توسيع" +"Export" = "تصدير" +"Export all" = "تصدير الكل" +"Export frames and layers as PNG, JPG, SVG or PDF" = "تصدير الإطارات والطبقات بصيغة PNG أو JPG أو SVG أو PDF" +"Export page as PNG" = "تصدير الصفحة بصيغة PNG" +"Export settings" = "إعدادات التصدير" +"Export variables" = "تصدير المتغيرات" +"Export {name}" = "تصدير {name}" +"Export {n} layers" = { other = "تصدير الطبقات، العدد: {n}" } +"Exported {file}" = "صُدّر {file}" +"Exported {name}" = "صُدّر {name}" +"Exported {name}; {n} kinds of content were changed or left out" = { other = "صُدّر {name}؛ عدد أنواع المحتوى التي عُدّلت أو أُهملت: {n}" } +"Exported {name}; {n} kinds of content were left out" = { other = "صُدّر {name}؛ عدد أنواع المحتوى التي أُهملت: {n}" } +"Exported {n} files" = { other = "اكتمل التصدير؛ عدد الملفات: {n}" } +"Exported {n} files; some content was changed or left out" = { other = "اكتمل تصدير الملفات وعددها {n}؛ عُدّل بعض المحتوى أو أُهمل" } +"Export…" = "تصدير…" +"Expose properties to instances" = "إتاحة الخصائص للنسخ المثيلة" +"Exposure" = "التعريض" +"Expression" = "تعبير" +"Extend collection" = "توسيع مجموعة" +"Extends \"{name}\": overridden values are marked" = "يوسّع «{name}»: القيم المتجاوزة مميزة" +"Eye" = "عين" +"F" = "F" +"Fade" = "تلاشي" +"False" = "خطأ" +"Feb" = "فبراير" +"Fetching from the server…" = "جارٍ الجلب من الخادم…" +"FigCraft couldn't open its window: {error}" = "تعذر على FigCraft فتح نافذته: {error}" +"FigCraft doesn't support every feature of these files yet. The notes list what was left out or changed in the imported copy; the original file is unchanged." = "لا يدعم FigCraft جميع مزايا هذه الملفات بعد. تسرد الملاحظات ما أُهمل أو عُدّل في النسخة المستوردة؛ ويظل الملف الأصلي دون تغيير." +"FigCraft {version} is currently the newest version available." = "FigCraft {version} هو أحدث إصدار متاح حاليًا." +"File" = "ملف" +"File name" = "اسم الملف" +"File not found" = "لم يُعثر على الملف" +"File published" = "نُشر الملف" +"Files aren't end-to-end encrypted: the server's operator can read them." = "الملفات غير مشفرة من طرف إلى طرف؛ يمكن لمشغّل الخادم قراءتها." +"Files nobody opens for {n} days are deleted." = { other = "تُحذف الملفات إذا لم يفتحها أحد طوال مدة بالأيام قدرها {n}." } +"Fill" = "تعبئة" +"Fill (fr)" = "ملء (fr)" +"Fill container" = "ملء الحاوية" +"Fill window" = "ملء النافذة" +"Fills" = "التعبئات" +"Fill|sizing" = "ملء" +"Filter and sort" = "تصفية وفرز" +"Find" = "بحث" +"Find and replace" = "بحث واستبدال" +"Find layers" = "بحث عن الطبقات" +"First" = "الأول" +"First commit" = "أول إيداع" +"First on top" = "الأول في الأعلى" +"Fit" = "ملاءمة" +"Fit device to window" = "ملاءمة الجهاز مع النافذة" +"Fit to contents" = "ملاءمة مع المحتويات" +"Fit to window" = "ملاءمة مع النافذة" +"Fit width" = "ملاءمة العرض" +"Fixed" = "ثابت" +"Fixed gap" = "فاصل ثابت" +"Fixed size" = "حجم ثابت" +"Flatten" = "تسطيح" +"Flip" = "قلب" +"Flip horizontal" = "قلب أفقي" +"Flip text to the other side" = "قلب النص إلى الجانب الآخر" +"Flip vertical" = "قلب رأسي" +"Flip width profile" = "قلب منحنى العرض" +"Flow chart" = "مخطط تدفق" +"Flow starting point" = "نقطة بداية التدفق" +"Flow starting points" = "نقاط بداية التدفقات" +"Flows" = "التدفقات" +"Focus view" = "عرض التركيز" +"Fold autosaves" = "طي نسخ الحفظ التلقائي" +"Folder: click to collapse" = "مجلد: انقر للطي" +"Folder: click to expand" = "مجلد: انقر للتوسيع" +"Follow" = "متابعة" +"Follow {name}" = "متابعة {name}" +"Following" = "جارٍ المتابعة" +"Following {name} · {key} to stop" = "جارٍ متابعة {name} · {key} للإيقاف" +"Font" = "الخط" +"Font not installed" = "الخط غير مثبت" +"Font size" = "حجم الخط" +"Font style" = "نمط الخط" +"Forget on this computer" = "نسيان على هذا الحاسوب" +"Format" = "التنسيق" +"Four screens of a trail app with components and a prototype flow" = "أربع شاشات لتطبيق مسارات مشي، بمكونات وتدفق نموذج تفاعلي" +"Fractions" = "كسور" +"Frame" = "إطار" +"Frame selection" = "إحاطة التحديد بإطار" +"Frame tools" = "أدوات الإطارات" +"Frames" = "الإطارات" +"From the library \"{name}\": read-only" = "من المكتبة «{name}»: للقراءة فقط" +"From {name}" = "من {name}" +"From {server}" = "من {server}" +"Frost" = "صقيع" +"Gap" = "الفاصل" +"Gap between columns" = "الفاصل بين الأعمدة" +"Gap between items" = "الفاصل بين العناصر" +"Gap between rows" = "الفاصل بين الصفوف" +"Getting started" = "بدء الاستخدام" +"Give the address of a server open to the public, or a server's address with its key (`figcraft-server key` prints it)." = "أدخل عنوان خادم متاح للعامة، أو عنوان خادم مع مفتاحه (يعرضه `figcraft-server key`)." +"Glass" = "زجاج" +"Go to main component" = "الانتقال إلى المكوّن الرئيسي" +"Go to {name}" = "الانتقال إلى {name}" +"Grab bag" = "تشكيلة متنوعة" +"Gradient" = "تدرج لوني" +"Gray" = "رمادي" +"Green" = "أخضر" +"Greyscale components and two example screens to sketch a flow with" = "مكونات رمادية وشاشتان توضيحيتان لتخطيط تدفق" +"Grid" = "شبكة" +"Grid ({size})" = "شبكة ({size})" +"Grid styles" = "أنماط الشبكات" +"Grid {size}" = "شبكة {size}" +"Group" = "مجموعة" +"Group selection" = "تجميع التحديد" +"Groups" = "المجموعات" +"Gutter" = "الفاصل بين المساحات" +"Hand tool" = "أداة اليد" +"Hanging list" = "قائمة معلّقة" +"Hanging punctuation" = "علامات ترقيم معلّقة" +"Hard light" = "ضوء شديد" +"Heart" = "قلب" +"Height" = "الارتفاع" +"Help" = "مساعدة" +"Help and resources" = "مساعدة وموارد" +"Help page" = "صفحة المساعدة" +"Here: {names}" = "الموجودون هنا: {names}" +"Hidden" = "مخفي" +"Hide contents" = "إخفاء المحتويات" +"Hide from publishing" = "إخفاء من النشر" +"Hide section contents" = "إخفاء محتويات القسم" +"Hide these tips (Getting started in the Help menu shows them again)" = "إخفاء هذه التلميحات (يعيد «بدء الاستخدام» في قائمة المساعدة إظهارها)" +"Hide when publishing" = "إخفاء عند النشر" +"Highlight layers on hover" = "تمييز الطبقات عند التحويم" +"Highlighter" = "قلم تمييز" +"Highlights" = "المناطق المضيئة" +"Hold Alt" = "اضغط مطولًا على Alt" +"Hold Alt+Z" = "اضغط مطولًا على Alt+Z" +"Hold Ctrl" = "اضغط مطولًا على Ctrl" +"Hold Z" = "اضغط مطولًا على Z" +"Hold ⌃ or ⌘" = "اضغط مطولًا على ⌃ أو ⌘" +"Hold ⌥" = "اضغط مطولًا على ⌥" +"Hold ⌥Z" = "اضغط مطولًا على ⌥Z" +"Home" = "الرئيسية" +"Horizontal" = "أفقي" +"Horizontal align" = "محاذاة أفقية" +"Horizontal hex" = "سداسي أفقي" +"Horizontal padding" = "الحشو الأفقي" +"Horizontal spacing" = "التباعد الأفقي" +"Hosted by {operator}" = "بإدارة {operator}" +"Hover a layer to see its properties" = "مرر المؤشر فوق طبقة لعرض خصائصها" +"Hover other layers to measure the distance" = "مرر المؤشر فوق طبقات أخرى لقياس المسافة" +"Hue" = "درجة اللون" +"Hug" = "احتواء المحتوى" +"Hug contents" = "احتواء المحتويات" +"Icon components on a 24 px grid with keylines and a size preview" = "مكونات أيقونات على شبكة 24 بكسل مع خطوط مرجعية ومعاينة للحجم" +"Icon set starter" = "نقطة بدء لمجموعة أيقونات" +"If it keeps happening, please report it at {link} with this message." = "إذا استمرت المشكلة، يُرجى الإبلاغ عنها في {link} مع هذه الرسالة." +"If" = "إذا" +"If {condition}" = "إذا {condition}" +"Ignore auto layout (absolute position)" = "تجاهل التخطيط التلقائي (موضع مطلق)" +"Ignore overlapping layers" = "تجاهل الطبقات المتداخلة" +"Ignore unsupported" = "تجاهل غير المدعوم" +"Image" = "صورة" +"Images" = "الصور" +"Import" = "استيراد" +"Import path" = "مسار الاستيراد" +"Import plugin from manifest" = "استيراد إضافة من ملف التعريف" +"Import plugin from manifest…" = "استيراد إضافة من ملف التعريف…" +"Import report" = "تقرير الاستيراد" +"Import variables" = "استيراد المتغيرات" +"Imported document" = "المستند المستورد" +"Imported {name}" = "استُورد {name}" +"Imported {n} new variables, updated {updated}" = { other = "استُوردت متغيرات جديدة عددها {n}، وحُدّث {updated}" } +"Import…" = "استيراد…" +"In an instance, this comes from the main component" = "في النسخة المثيلة، تأتي هذه القيمة من المكوّن الرئيسي" +"In the browser you can join sessions the desktop app hosts and files on a FigCraft server. A page opened over https reaches other computers only through wss:// links (a server behind TLS)." = "يمكنك في المتصفح الانضمام إلى جلسات يستضيفها تطبيق سطح المكتب وملفات على خادم FigCraft. لا تتصل الصفحة المفتوحة عبر https بحواسيب أخرى إلا بروابط wss:// (خادم يعمل خلف TLS)." +"Include bounding box" = "تضمين مربع الإحاطة" +"Include id attribute" = "تضمين السمة id" +"Included" = "مضمّن" +"Included in layout" = "مضمّن في التخطيط" +"Individual corners" = "زوايا منفصلة" +"Individual padding" = "حشو منفصل لكل جانب" +"Individual strokes" = "حدود خارجية منفصلة" +"Ink" = "حبر" +"Inner shadow" = "ظل داخلي" +"Inside" = "داخل" +"Inspect" = "فحص" +"Inspect the layer under the pointer: size, colours, typography" = "فحص الطبقة تحت المؤشر: الحجم والألوان والطباعة" +"Install plugin" = "تثبيت إضافة" +"Install" = "تثبيت" +"Installed {name}" = "ثُبّت {name}" +"Installed" = "مثبّت" +"Installing…" = "جارٍ التثبيت…" +"Instance" = "نسخة مثيلة" +"Instance properties" = "خصائص النسخة المثيلة" +"Instance swap" = "استبدال النسخة المثيلة" +"Instance swap (no other component)" = "استبدال النسخة المثيلة (لا يوجد مكوّن آخر)" +"Instances" = "النسخ المثيلة" +"Instant" = "فوري" +"Intensity" = "الشدة" +"Interaction" = "تفاعل" +"Interactions" = "التفاعلات" +"Interface design and prototyping. A free, open-source, clean-room design tool written from scratch in Rust, part of the ArtCraft Crafting Apps." = "تصميم الواجهات والنماذج التفاعلية. أداة تصميم حرة ومفتوحة المصدر، مكتوبة من الصفر بلغة Rust وفق نهج التطوير المستقل، ضمن تطبيقات ArtCraft." +"Interface size" = "حجم الواجهة" +"Intersect" = "تقاطع" +"Intersects" = "يتقاطع" +"Invalid color" = "لون غير صالح" +"Invite link" = "رابط الدعوة" +"Invite link copied" = "نُسخ رابط الدعوة" +"It asks permission to:" = "تطلب الإذن بما يلي:" +"Jan" = "يناير" +"Join" = "انضمام" +"Join code copied" = "نُسخ رمز الانضمام" +"Join code or invite link" = "رمز انضمام أو رابط دعوة" +"Join live session" = "الانضمام إلى جلسة مباشرة" +"Join us on Discord" = "انضم إلينا على Discord" +"Join with a code" = "الانضمام برمز" +"Joined" = "تم الانضمام" +"Joined {file}" = "تم الانضمام إلى {file}" +"Joining…" = "جارٍ الانضمام…" +"Join|stroke" = "وصلة الحد الخارجي" +"Jul" = "يوليو" +"Jun" = "يونيو" +"Just now" = "الآن" +"Justify" = "ضبط المحاذاة" +"Kanban board" = "لوحة كانبان" +"Keep a measurement on the canvas for developers" = "إبقاء قياس على لوحة الرسم للمطورين" +"Keep appearance" = "الحفاظ على المظهر" +"Keep appearance converts every color value to {profile} so colors look the same. Keep values leaves the numbers as they are, so colors shift." = "يحوّل «الحفاظ على المظهر» كل قيمة لونية إلى {profile} لتبقى الألوان كما تبدو. ويُبقي «الحفاظ على القيم» الأرقام كما هي، فتتغير الألوان." +"Keep tool selected after use" = "إبقاء الأداة محددة بعد الاستخدام" +"Keep values" = "الحفاظ على القيم" +"Key/Gamepad" = "مفتاح/ذراع ألعاب" +"Key/Gamepad {key}" = "مفتاح/ذراع ألعاب {key}" +"Keyboard shortcuts" = "اختصارات لوحة المفاتيح" +"Kits" = "الأطقم" +"Landing page" = "صفحة هبوط" +"Language" = "اللغة" +"Lasso" = "تحديد حر" +"Last" = "الأخير" +"Last change: {note}" = "آخر تغيير: {note}" +"Last commit" = "آخر إيداع" +"Last modified" = "آخر تعديل" +"Last on top" = "الأخير في الأعلى" +"Layer blur" = "تمويه الطبقة" +"Layer name" = "اسم الطبقة" +"Layers" = "الطبقات" +"Layers in an instance take their position from the main component" = "تأخذ الطبقات داخل نسخة مثيلة مواضعها من المكوّن الرئيسي" +"Layout" = "التخطيط" +"Layout grid" = "شبكة التخطيط" +"Layout grid settings" = "إعدادات شبكة التخطيط" +"Layout grids" = "شبكات التخطيط" +"Leave session" = "مغادرة الجلسة" +"Leaves" = "أوراق" +"Leaving the prototype" = "مغادرة النموذج التفاعلي" +"Left" = "يسار" +"Left & right" = "يسار ويمين" +"Left padding" = "الحشو الأيسر" +"Left side" = "الجانب الأيسر" +"Left side width" = "عرض الجانب الأيسر" +"Letter case" = "حالة الأحرف" +"Letter spacing" = "تباعد الحروف" +"Libraries" = "المكتبات" +"Libraries in this file" = "المكتبات في هذا الملف" +"Library updates available" = "تحديثات المكتبات متاحة" +"Library: click to collapse" = "مكتبة: انقر للطي" +"Library: click to expand" = "مكتبة: انقر للتوسيع" +"Library: its variables are read-only here; edit them in the library file and publish it" = "مكتبة: متغيراتها للقراءة فقط هنا؛ حررها في ملف المكتبة وانشره" +"Light" = "فاتح" +"Lighten" = "تفتيح" +"Light|glass" = "الإضاءة" +"Line" = "خط" +"Line arrow" = "سهم خطي" +"Line delta" = "فرق عدد الأسطر" +"Line height" = "ارتفاع السطر" +"Linear" = "خطي" +"Lines" = "الأسطر" +"Lines +/−" = "الأسطر +/−" +"Lines added" = "الأسطر المضافة" +"Lines deleted" = "الأسطر المحذوفة" +"Link" = "رابط" +"Link copied" = "نُسخ الرابط" +"Link docs, code or tickets for developers." = "اربط مستندات أو كودًا أو تذاكر للمطورين." +"Link frames on the Prototype tab, then present the flow" = "اربط الإطارات في علامة تبويب النموذج التفاعلي، ثم اعرض التدفق" +"Link this component to its code component: instances then show your real snippet with their values." = "اربط هذا المكوّن بمكوّنه البرمجي؛ لتعرض نسخه المثيلة المقتطف الفعلي بقيمها." +"List spacing" = "تباعد القائمة" +"List style" = "نمط القائمة" +"Live session" = "جلسة مباشرة" +"Live · {people}" = "مباشر · {people}" +"Local components" = "المكونات المحلية" +"Local network" = "الشبكة المحلية" +"Local styles" = "الأنماط المحلية" +"Local variables" = "المتغيرات المحلية" +"Lock/Unlock" = "قفل/إلغاء القفل" +"Locked" = "مقفل" +"Lowercase" = "أحرف صغيرة" +"Luminance" = "النصوع" +"Luminosity" = "الإضاءة اللونية" +"Main" = "الرئيسي" +"Main component deleted" = "حُذف المكوّن الرئيسي" +"Main menu" = "القائمة الرئيسية" +"Make a component" = "إنشاء مكوّن" +"Make slot" = "إنشاء خانة محتوى" +"Mar" = "مارس" +"Margin" = "الهامش" +"Mark all as read" = "تحديد الكل كمقروء" +"Mark as resolved" = "تحديد كمحلول" +"Mark as unread" = "تحديد كغير مقروء" +"Mark as unresolved" = "تحديد كغير محلول" +"Marker" = "قلم تحديد" +"Mask" = "قناع" +"Mass · Stiffness · Damping" = "الكتلة · الصلابة · التخميد" +"Match (empty: the whole name)" = "المطابقة (فارغ: الاسم كاملًا)" +"Max H" = "أقصى ارتفاع" +"Max W" = "أقصى عرض" +"Max lines" = "أقصى عدد للأسطر" +"Maximize" = "تكبير النافذة" +"May" = "مايو" +"Measure to the selection" = "قياس المسافة إلى التحديد" +"Measurements" = "القياسات" +"Merge into main" = "دمج في الملف الرئيسي" +"Merge regions" = "دمج المناطق" +"Merge the branch into the main file (one undo step) and archive it" = "دمج الفرع في الملف الرئيسي (خطوة تراجع واحدة) وأرشفته" +"Merged" = "مدمج" +"Merged PRs" = "طلبات السحب المدمجة" +"Min H" = "أدنى ارتفاع" +"Min W" = "أدنى عرض" +"Minimize" = "تصغير النافذة" +"Minutes" = "الدقائق" +"Mirror angle" = "تماثل الزاوية" +"Mirror angle and length" = "تماثل الزاوية والطول" +"Mirroring" = "التماثل" +"Missing" = "مفقود" +"Missing fonts" = "خطوط مفقودة" +"Missing layer" = "طبقة مفقودة" +"Missing style" = "نمط مفقود" +"Missing variable" = "متغير مفقود" +"Miter" = "وصلة حادة" +"Miter angle" = "زاوية الوصلة الحادة" +"Mixed" = "مختلط" +"Mixed fonts" = "خطوط مختلطة" +"Mixed interactions: click + to replace them" = "تفاعلات مختلطة: انقر على + لاستبدالها" +"Mobile app" = "تطبيق جوال" +"Mode" = "الوضع" +"Model" = "النموذج" +"Models" = "النماذج" +"Mono" = "أحادي" +"More" = "المزيد" +"More instance actions" = "مزيد من إجراءات النسخة المثيلة" +"Mouse down" = "ضغط زر الفأرة" +"Mouse enter" = "دخول المؤشر" +"Mouse leave" = "مغادرة المؤشر" +"Mouse up" = "إفلات زر الفأرة" +"Move along the toolbar or the layer rows" = "التنقل على شريط الأدوات أو صفوف الطبقات" +"Move" = "نقل" +"Move column left" = "نقل العمود لليسار" +"Move column right" = "نقل العمود لليمين" +"Move down" = "نقل لأسفل" +"Move in" = "نقل للداخل" +"Move out" = "نقل للخارج" +"Move tools" = "أدوات النقل" +"Move up" = "نقل لأعلى" +"Moved to {name}" = "نُقل إلى {name}" +"Multi" = "متعدد" +"Multiply" = "ضرب" +"Muted" = "هادئ" +"Name" = "الاسم" +"Name (A–Z)" = "الاسم (A–Z)" +"Named instance" = "نسخة مسماة" +"Navigate to" = "الانتقال إلى" +"Nested instance" = "نسخة مثيلة متداخلة" +"New board" = "لوحة جديدة" +"New design file" = "ملف تصميم جديد" +"Newest first" = "الأحدث أولًا" +"Next or previous control in the focused region" = "عنصر التحكم التالي أو السابق في المنطقة المركّز عليها" +"Next frame" = "الإطار التالي" +"Next ready for dev" = "التالي الجاهز للتطوير" +"Next size option" = "خيار الحجم التالي" +"No assets: no export settings, icons or images. Add export settings in the Design tab." = "لا توجد أصول: لا إعدادات تصدير ولا أيقونات ولا صور. أضف إعدادات تصدير في علامة تبويب التصميم." +"No boolean variables fit here." = "لا توجد متغيرات منطقية مناسبة هنا." +"No boolean variables yet. Create them in Local variables." = "لا توجد متغيرات منطقية بعد. أنشئها في «المتغيرات المحلية»." +"No branches. A branch is a copy of the file to try changes in, then review and merge." = "لا توجد فروع. الفرع نسخة من الملف لتجربة التغييرات ثم مراجعتها ودمجها." +"No category" = "دون فئة" +"No changes" = "لا توجد تغييرات" +"No color styles" = "لا توجد أنماط ألوان" +"No colour variables fit here." = "لا توجد متغيرات ألوان مناسبة هنا." +"No colour variables yet. Create them in Local variables." = "لا توجد متغيرات ألوان بعد. أنشئها في «المتغيرات المحلية»." +"No comments yet" = "لا توجد تعليقات بعد" +"No compatibility warnings reported" = "لم تُسجل تحذيرات توافق" +"No components yet. Select layers and press {keys}." = "لا توجد مكونات بعد. حدد طبقات واضغط على {keys}." +"No conflicts." = "لا توجد تعارضات." +"No contributor data was built into this copy." = "لم تُضمّن بيانات المساهمين في هذه النسخة." +"No device" = "دون جهاز" +"No fonts match" = "لا توجد خطوط مطابقة" +"No files or templates match your search" = "لا توجد ملفات أو قوالب تطابق بحثك" +"No join code here (the server is older than join codes, or this address can't be put in one): share the link instead." = "لا يتوفر رمز انضمام هنا (الخادم أقدم من دعم الرموز، أو يتعذر تضمين عنوانه في رمز)؛ شارك الرابط بدلًا منه." +"No layer changes to show." = "لا توجد تغييرات في الطبقات لعرضها." +"No libraries yet. Add a .figcraft file that was published as a library, or paste a team library's link." = "لا توجد مكتبات بعد. أضف ملف .figcraft منشورًا كمكتبة، أو الصق رابط مكتبة فريق." +"No list" = "دون قائمة" +"No matching comments" = "لا توجد تعليقات مطابقة" +"No matching components" = "لا توجد مكونات مطابقة" +"No matching layers" = "لا توجد طبقات مطابقة" +"No matching styles" = "لا توجد أنماط مطابقة" +"No matching variables" = "لا توجد متغيرات مطابقة" +"No mirroring" = "دون تماثل" +"No model credits were built into this copy." = "لم تُضمّن أسماء النماذج المساهمة في هذه النسخة." +"No number variables fit here." = "لا توجد متغيرات رقمية مناسبة هنا." +"No number variables yet. Create them in Local variables." = "لا توجد متغيرات رقمية بعد. أنشئها في «المتغيرات المحلية»." +"No other pages" = "لا توجد صفحات أخرى" +"No paints" = "دون تلوين" +"No plugins on {server}." = "لا توجد إضافات على {server}." +"No plugins yet. Import a development plugin from its figcraft-plugin.json." = "لا توجد إضافات بعد. استورد إضافة تطوير من ملف figcraft-plugin.json الخاص بها." +"No preferred components" = "لا توجد مكونات مفضلة" +"No preset" = "دون إعداد مسبق" +"No saved versions yet. Save a version to mark a point in your work you can come back to." = "لا توجد إصدارات محفوظة بعد. احفظ إصدارًا لتحدد مرحلة من عملك يمكنك العودة إليها." +"No scrolling" = "دون تمرير" +"No shortcuts match" = "لا توجد اختصارات مطابقة" +"No status" = "دون حالة" +"No string variables fit here." = "لا توجد متغيرات نصية مناسبة هنا." +"No string variables yet. Create them in Local variables." = "لا توجد متغيرات نصية بعد. أنشئها في «المتغيرات المحلية»." +"No styles yet." = "لا توجد أنماط بعد." +"No styles yet. Click + to create one from the selection." = "لا توجد أنماط بعد. انقر على + لإنشاء نمط من التحديد." +"No templates match your search" = "لا توجد قوالب تطابق بحثك" +"No text styles yet. Click + to create one from the selected text." = "لا توجد أنماط نصوص بعد. انقر على + لإنشاء نمط من النص المحدد." +"No variables fit here." = "لا توجد متغيرات مناسبة هنا." +"No variables yet. Create them in Local variables." = "لا توجد متغيرات بعد. أنشئها في «المتغيرات المحلية»." +"No votes yet" = "لا توجد أصوات بعد" +"Nobody else is here yet" = "لم ينضم أحد غيرك بعد" +"Noise" = "تشويش" +"None" = "بلا" +"None." = "لا شيء." +"Normal" = "عادي" +"Not bound" = "غير مرتبط" +"Not in a live session" = "لست في جلسة مباشرة" +"Not in this font" = "غير متاح في هذا الخط" +"Not properties, kept as written: {names}" = "ليست خصائص، أُبقيت كما كُتبت: {names}" +"Not read yet" = "لم تُقرأ بعد" +"Not shared" = "غير مشارك" +"Note {n}" = "الملاحظة {n}" +"Nothing changed since this version." = "لم يتغير شيء منذ هذا الإصدار." +"Nothing changed since this was marked ready for dev." = "لم يتغير شيء منذ تحديد هذا العنصر كجاهز للتطوير." +"Nothing here yet. Set a frame's status to list it." = "لا يوجد شيء هنا بعد. عيّن حالة إطار لإدراجه." +"Nothing online yet. Use Share on a file to put it online and it is listed here." = "لا توجد ملفات على الإنترنت بعد. استخدم «مشاركة» على ملف لإتاحته على الإنترنت وإدراجه هنا." +"Nothing to export" = "لا يوجد ما يُصدّر" +"Nov" = "نوفمبر" +"Now" = "الآن" +"Nudge (Shift: big nudge)" = "إزاحة طفيفة (Shift: إزاحة أكبر)" +"Nudge amount" = "مقدار الإزاحة الطفيفة" +"Number" = "رقم" +"Number ↑" = "الرقم ↑" +"Number ↓" = "الرقم ↓" +"Numbered list" = "قائمة مرقمة" +"Object" = "كائن" +"Oct" = "أكتوبر" +"Off" = "إيقاف" +"Offered first when filling the slot (any content is allowed)" = "يُقترح أولًا عند ملء الخانة (يُسمح بأي محتوى)" +"Offered first when swapping the instance (any component is allowed)" = "يُقترح أولًا عند استبدال النسخة المثيلة (يُسمح بأي مكوّن)" +"Offset" = "الإزاحة" +"Oldest first" = "الأقدم أولًا" +"On click" = "عند النقر" +"On drag" = "عند السحب" +"On this page" = "في هذه الصفحة" +"One announcement in five common sizes: square, portrait, story, link and banner" = "إعلان واحد بخمسة أحجام شائعة: مربع وطولي وقصة ورابط ولافتة" +"Online" = "على الإنترنت" +"Online files" = "ملفات الإنترنت" +"Online sharing is off: files are shared on the local network only." = "المشاركة عبر الإنترنت متوقفة؛ تُشارك الملفات على الشبكة المحلية فقط." +"Only the first changed layers are listed." = "تُسرد الطبقات الأولى التي تغيرت فقط." +"Only the first {n} changed layers are listed." = "تُسرد أول {n} من الطبقات التي تغيرت فقط." +"Only your threads" = "سلاسل تعليقاتك فقط" +"Opacity" = "العتامة" +"Opacity & blend" = "العتامة والمزج" +"Opacity 10%…90%, 0: 100%" = "عتامة 10%…90%، 0: 100%" +"Open" = "فتح" +"Open .figcraft, .svg or images" = "فتح ملفات .figcraft أو .svg أو صور" +"Open branch" = "فتح الفرع" +"Open file" = "فتح ملف" +"Open files" = "فتح ملفات" +"Open presentations" = "فتح العروض التقديمية" +"Open in focus view" = "فتح في عرض التركيز" +"Open in new window" = "فتح في نافذة جديدة" +"Open invite links in FigCraft" = "فتح روابط الدعوة في FigCraft" +"Open link" = "فتح الرابط" +"Open link {url}" = "فتح الرابط {url}" +"Open overlay" = "فتح طبقة عائمة" +"Open prototype preview" = "فتح معاينة النموذج التفاعلي" +"Open variables ({count})" = "فتح المتغيرات ({count})" +"Opened as a new document" = "فُتح كمستند جديد" +"Opened “{name}” in a new tab" = "فُتح «{name}» في علامة تبويب جديدة" +"Opening the file…" = "جارٍ فتح الملف…" +"Opening {n} files as new files" = { other = "جارٍ فتح ملفات جديدة، العدد: {n}" } +"Open|comments" = "مفتوحة" +"Options" = "الخيارات" +"Orange" = "برتقالي" +"Order" = "الترتيب" +"Other apps may not open every .fig file exported here." = "قد لا تتمكن التطبيقات الأخرى من فتح كل ملف .fig يُصدّر هنا." +"Other" = "أخرى" +"Others lose access and keep their copy; the file stays on the server for you" = "يفقد الآخرون الوصول ويحتفظون بنسخهم؛ ويبقى الملف لك على الخادم" +"Others type this under Share ▸ Join with a code" = "يدخل الآخرون هذا الرمز ضمن مشاركة ▸ الانضمام برمز" +"Outline stroke" = "تحويل الحد الخارجي إلى شكل" +"Outline text" = "تحويل النص إلى مسارات" +"Outlines" = "المخططات الخارجية" +"Outside" = "خارج" +"Overflow" = "التجاوز" +"Overlay" = "طبقة عائمة" +"Overlay position" = "موضع الطبقة العائمة" +"Overridden here (the collection it extends has another value)" = "متجاوز هنا (للمجموعة التي يوسّعها قيمة أخرى)" +"Overrides" = "التجاوزات" +"Owner token" = "رمز المالك" +"Owner token copied" = "نُسخ رمز المالك" +"PDF print options" = "خيارات طباعة PDF" +"PDF print settings" = "إعدادات طباعة PDF" +"Padding" = "الحشو" +"Page" = "صفحة" +"Page deleted" = "حُذفت الصفحة" +"Pages" = "الصفحات" +"Pages added to the document" = "أُضيفت الصفحات إلى المستند" +"Pause" = "إيقاف مؤقت" +"Pink" = "وردي" +"Placed on the current page" = "وُضع في الصفحة الحالية" +"Pages: {pages}" = "الصفحات: {pages}" +"Paint bucket" = "دلو الطلاء" +"Pan the canvas" = "تحريك لوحة الرسم" +"Pan with nothing selected (Shift: farther)" = "تحريك العرض دون تحديد (Shift: مسافة أكبر)" +"Panels" = "اللوحات" +"Paper" = "الورق" +"Paragraph indent" = "المسافة البادئة للفقرة" +"Paragraph indent applies to left-aligned text" = "تُطبق المسافة البادئة على النص المحاذى لليسار" +"Paragraph spacing" = "تباعد الفقرات" +"Pass through" = "تمرير عبر" +"Paste a link (https://…)" = "الصق رابطًا (https://…)" +"Paste a team library link (a view link)" = "الصق رابط مكتبة فريق (رابط عرض)" +"Paste effect" = "لصق التأثير" +"Paste fill" = "لصق التعبئة" +"Paste here" = "لصق هنا" +"Paste stroke" = "لصق الحد الخارجي" +"Paste to replace" = "لصق للاستبدال" +"Pasted design layers; {n} kinds of content were left out" = { other = "لُصقت طبقات التصميم؛ عدد أنواع المحتوى التي أُهملت: {n}" } +"Pattern" = "نمط متكرر" +"Pattern alignment" = "محاذاة النمط المتكرر" +"Pattern scale" = "مقياس النمط المتكرر" +"Pattern source" = "مصدر النمط المتكرر" +"Pen" = "قلم" +"Pencil" = "قلم رصاص" +"People in this file" = "الأشخاص في هذا الملف" +"People join from anywhere with a code. The file is kept on {server} while you share it." = "يمكن الانضمام من أي مكان برمز. يُحفظ الملف على {server} أثناء مشاركته." +"People on your network join with a code. Nothing goes through a server." = "ينضم الأشخاص على شبكتك برمز. لا تمر البيانات عبر خادم." +"Phone" = "هاتف" +"Pick color" = "التقاط لون" +"Pick color (I)" = "التقاط لون (I)" +"Pick one font family first" = "اختر عائلة خط واحدة أولًا" +"Pick the Frame tool, then drag on the canvas or choose a device size" = "اختر أداة الإطار، ثم اسحب على لوحة الرسم أو اختر حجم جهاز" +"Pin a property" = "تثبيت خاصية" +"Pinch" = "قرص" +"Pixel grid" = "شبكة البكسلات" +"Pixel preview 1x" = "معاينة البكسلات 1x" +"Pixel preview 2x" = "معاينة البكسلات 2x" +"Place a shape or frame (its tool chosen)" = "وضع شكل أو إطار (بعد اختيار أداته)" +"Place automatically" = "وضع تلقائي" +"Place image" = "وضع صورة" +"Plugin" = "إضافة" +"Plugins run in FigCraft's sandbox, without files, network or clock. Install only plugins you trust." = "تعمل الإضافات داخل بيئة FigCraft المعزولة دون ملفات أو شبكة أو ساعة. لا تثبّت إلا إضافات تثق بها." +"Plugins" = "الإضافات" +"Plugins & widgets" = "الإضافات وعناصر الواجهة" +"Plus darker" = "جمع مع تعتيم" +"Plus lighter" = "جمع مع تفتيح" +"Plus one" = "إضافة واحد" +"Point" = "نقطة" +"Points" = "نقاط" +"Polygon" = "مضلع" +"Polygons" = "مضلعات" +"Port" = "المنفذ" +"Position" = "الموضع" +"Post" = "نشر" +"Preferences" = "التفضيلات" +"Preferred" = "مفضل" +"Present" = "عرض" +"Present or preview" = "عرض أو معاينة" +"Present this flow" = "عرض هذا التدفق" +"Presentation" = "العرض التقديمي" +"Presentation slides" = "شرائح عرض تقديمي" +"Presenting: comments" = "العرض: التعليقات" +"Presenting: cycle the size options" = "العرض: التبديل بين خيارات الحجم" +"Presenting: full screen" = "العرض: ملء الشاشة" +"Presenting: next frame" = "العرض: الإطار التالي" +"Presenting: previous frame" = "العرض: الإطار السابق" +"Presenting: restart" = "العرض: إعادة البدء" +"Preserve scroll position" = "الحفاظ على موضع التمرير" +"Presets" = "الإعدادات المسبقة" +"Press a key…" = "اضغط على مفتاح…" +"Playground" = "ساحة التجربة" +"Preview" = "معاينة" +"Preview this flow" = "معاينة هذا التدفق" +"Preview this frame" = "معاينة هذا الإطار" +"Previous frame" = "الإطار السابق" +"Previous ready for dev" = "السابق الجاهز للتطوير" +"Progressive" = "تدريجي" +"Properties" = "الخصائص" +"Prototype" = "النموذج التفاعلي" +"Prototype preview" = "معاينة النموذج التفاعلي" +"Prototype settings" = "إعدادات النموذج التفاعلي" +"Publish" = "نشر" +"Publish changes" = "نشر التغييرات" +"Publish to another server…" = "النشر إلى خادم آخر…" +"Publish to server" = "النشر إلى الخادم" +"Published version {v}" = "الإصدار المنشور {v}" +"Published version {v} to the server" = "نُشر الإصدار {v} إلى الخادم" +"Published version {v}: save the file so other files can use it" = "نُشر الإصدار {v}: احفظ الملف لتتمكن ملفات أخرى من استخدامه" +"Published · {people}" = "منشور · {people}" +"Publishing to a server needs the desktop app; in the browser you can join a server's files" = "يتطلب النشر إلى خادم تطبيق سطح المكتب؛ ويمكن الانضمام إلى ملفات الخادم من المتصفح" +"Publishing with the server's key." = "جارٍ النشر باستخدام مفتاح الخادم." +"Publishing…" = "جارٍ النشر…" +"Push" = "دفع" +"Push changes to main component" = "دفع التغييرات إلى المكوّن الرئيسي" +"Put text on path" = "وضع النص على مسار" +"Question" = "سؤال" +"R" = "R" +"Radial" = "شعاعي" +"Radius" = "نصف القطر" +"Ratio" = "النسبة" +"Reading the library…" = "جارٍ قراءة المكتبة…" +"Ready for dev" = "جاهز للتطوير" +"Real name" = "الاسم الحقيقي" +"Recent" = "الأخيرة" +"Recent files" = "الملفات الأخيرة" +"Recents" = "الأخيرة" +"Recovered {n} unsaved files after the app quit unexpectedly: save them to keep them" = { other = "استُعيدت ملفات غير محفوظة بعد إغلاق التطبيق المفاجئ، عددها {n}؛ احفظها للاحتفاظ بها" } +"Rectangle" = "مستطيل" +"Rectangles" = "مستطيلات" +"Red" = "أحمر" +"Reduce motion" = "تقليل الحركة" +"Refraction" = "الانكسار" +"Regular expression" = "تعبير نمطي" +"Relative to" = "بالنسبة إلى" +"Relative to your system's display scaling (100% is the system's own size). Document zoom is separate." = "بالنسبة إلى مقياس عرض النظام (100% هو الحجم الأصلي للنظام). تكبير المستند مستقل عن ذلك." +"Remove" = "إزالة" +"Remove all" = "إزالة الكل" +"Remove annotation" = "إزالة التعليق التوضيحي" +"Remove auto layout" = "إزالة التخطيط التلقائي" +"Remove column" = "إزالة العمود" +"Remove dev resource" = "إزالة مورد المطور" +"Remove export setting" = "إزالة إعداد التصدير" +"Remove from recents" = "إزالة من الملفات الأخيرة" +"Remove from server" = "إزالة من الخادم" +"Remove from server…" = "إزالة من الخادم…" +"Remove guide" = "إزالة الدليل" +"Remove interaction" = "إزالة التفاعل" +"Remove library from this file" = "إزالة المكتبة من هذا الملف" +"Remove measurement" = "إزالة القياس" +"Remove min and max" = "إزالة الحدين الأدنى والأقصى" +"Remove min and max height" = "إزالة الحدين الأدنى والأقصى للارتفاع" +"Remove min and max width" = "إزالة الحدين الأدنى والأقصى للعرض" +"Remove regions" = "إزالة المناطق" +"Remove row" = "إزالة الصف" +"Remove slot" = "إزالة خانة المحتوى" +"Remove starting point" = "إزالة نقطة البداية" +"Remove stop" = "إزالة نقطة التدرج" +"Remove text from path" = "إزالة النص من المسار" +"Remove the else and its actions" = "إزالة «وإلا» وإجراءاتها" +"Remove this condition and its actions" = "إزالة هذا الشرط وإجراءاته" +"Remove this file from the server? It can't be shared or opened from there again. Your copy stays open here." = "هل تريد إزالة هذا الملف من الخادم؟ لن يمكن مشاركته أو فتحه من هناك مجددًا. تبقى نسختك مفتوحة هنا." +"Remove {name} from session" = "إزالة {name} من الجلسة" +"Remove {name} from {server}?" = "هل تريد إزالة {name} من {server}؟" +"Removed" = "أُزيل" +"Removed from the server" = "أُزيل من الخادم" +"Removed since it was marked" = "أُزيل منذ تحديد الحالة" +"Removed since this version" = "أُزيل منذ هذا الإصدار" +"Rename" = "إعادة تسمية" +"Rename duplicated layers" = "إعادة تسمية الطبقات المكررة" +"Rename folder" = "إعادة تسمية المجلد" +"Rename group" = "إعادة تسمية مجموعة العناصر" +"Rename layers" = "إعادة تسمية الطبقات" +"Rename mode" = "إعادة تسمية الوضع" +"Rename on the server" = "إعادة التسمية على الخادم" +"Rename on the server…" = "إعادة التسمية على الخادم…" +"Rename page" = "إعادة تسمية الصفحة" +"Rename to" = "إعادة التسمية إلى" +"Reorder selection" = "إعادة ترتيب التحديد" +"Replace all" = "استبدال الكل" +"Replace mixed export settings" = "استبدال إعدادات التصدير المختلطة" +"Replace with" = "استبدال بـ" +"Replace with a new interaction" = "استبدال بتفاعل جديد" +"Reply" = "رد" +"Report" = "إبلاغ" +"Report this file…" = "الإبلاغ عن هذا الملف…" +"Reset" = "إعادة تعيين" +"Reset adjustments" = "إعادة تعيين الضبط" +"Reset all changes" = "إعادة تعيين جميع التغييرات" +"Reset all overrides on this layer" = "إعادة تعيين جميع التجاوزات على هذه الطبقة" +"Reset overrides" = "إعادة تعيين التجاوزات" +"Reset slot" = "إعادة تعيين خانة المحتوى" +"Reset this override" = "إعادة تعيين هذا التجاوز" +"Reset to style" = "إعادة إلى النمط" +"Reset to the inherited value" = "إعادة إلى القيمة الموروثة" +"Resize by the nudge amount" = "تغيير الحجم بمقدار الإزاحة الطفيفة" +"Resize frames to the device's screen (or the window without a device): their constraints and auto layout respond" = "تغيير حجم الإطارات ليلائم شاشة الجهاز (أو النافذة عند غياب الجهاز)؛ تستجيب قيودها وتخطيطها التلقائي لذلك" +"Resize to fit" = "تغيير الحجم للملاءمة" +"Resizing" = "تغيير الحجم" +"Resolve" = "حل" +"Resolve change" = "حل التغيير" +"Resolved" = "محلول" +"Resources" = "الموارد" +"Responsive" = "متجاوب" +"Restart" = "إعادة البدء" +"Restore" = "استعادة" +"Restore main component" = "استعادة المكوّن الرئيسي" +"Restore this version" = "استعادة هذا الإصدار" +"Restored “{name}”" = "استُعيد «{name}»" +"Retrospective" = "مراجعة ختامية" +"Results" = "النتائج" +"Resume" = "استئناف" +"Reverse the order" = "عكس الترتيب" +"Reversed triangle" = "مثلث معكوس" +"Review and merge" = "مراجعة ودمج" +"Ribbon" = "شريط" +"Right" = "يمين" +"Right padding" = "الحشو الأيمن" +"Right side" = "الجانب الأيمن" +"Right side width" = "عرض الجانب الأيمن" +"Rotate 90°" = "تدوير 90°" +"Rotate 90° right" = "تدوير 90° لليمين" +"Rotate to landscape" = "تدوير إلى الاتجاه الأفقي" +"Rotate to portrait" = "تدوير إلى الاتجاه العمودي" +"Rotation" = "الدوران" +"Rotation jitter" = "عشوائية الدوران" +"Round" = "دائري" +"Rounded" = "مستدير" +"Rounded rectangle" = "مستطيل مستدير الزوايا" +"Row" = "صف" +"Row gap" = "الفاصل بين الصفوف" +"Row sizes" = "أحجام الصفوف" +"Row span" = "امتداد الصفوف" +"Rows" = "الصفوف" +"Rows {count}" = "الصفوف {count}" +"Rulers" = "المساطر" +"Run" = "تشغيل" +"Run {label}" = "تشغيل {label}" +"Save file" = "حفظ الملف" +"Save files automatically" = "حفظ الملفات تلقائيًا" +"Search templates" = "بحث في القوالب" +"See all templates" = "عرض جميع القوالب" +"Select layers and they space themselves as their content changes" = "حدد طبقات لتتباعد تلقائيًا مع تغير محتواها" +"SHA-256: {sha}…" = "SHA-256: {sha}…" +"Same as layer" = "مثل الطبقة" +"Saturation" = "التشبع" +"Save" = "حفظ" +"Save as" = "حفظ باسم" +"Save as preset…" = "حفظ كإعداد مسبق…" +"Save version {key}" = "حفظ إصدار {key}" +"Saved" = "محفوظ" +"Saved {name}" = "حُفظ {name}" +"Say something" = "اكتب شيئًا" +"Scale" = "المقياس" +"Scatter" = "تناثر" +"Scoping: where pickers offer it" = "النطاق: مواضع عرضه في أدوات الاختيار" +"Screen" = "شاشة" +"Scroll behavior" = "سلوك التمرير" +"Scroll to" = "التمرير إلى" +"Scroll to layer" = "التمرير إلى الطبقة" +"Scroll with parent" = "التمرير مع العنصر الأب" +"Search plugins" = "بحث في الإضافات" +"Search" = "بحث" +"Search actions, layers and tools" = "بحث عن إجراءات وطبقات وأدوات" +"Search assets" = "بحث في الأصول" +"Search comments" = "بحث في التعليقات" +"Search files and templates" = "بحث عن ملفات وقوالب" +"Search results" = "نتائج البحث" +"Search fonts" = "بحث في الخطوط" +"Search layers" = "بحث في الطبقات" +"Search pages" = "بحث في الصفحات" +"Search shortcuts" = "بحث في الاختصارات" +"Section" = "قسم" +"Section color" = "لون القسم" +"Sections" = "الأقسام" +"Select a frame and add a starting point to present it as a flow." = "حدد إطارًا وأضف نقطة بداية لعرضه كتدفق." +"Select a frame to preview it" = "حدد إطارًا لمعاينته" +"Select a layer to see its properties and code" = "حدد طبقة لعرض خصائصها وكودها" +"Select all" = "تحديد الكل" +"Select all with same" = "تحديد كل ما له نفس" +"Select layer" = "تحديد طبقة" +"Select layers to apply the style to" = "حدد الطبقات التي تريد تطبيق النمط عليها" +"Select layers with this color" = "تحديد الطبقات بهذا اللون" +"Select overlapping shapes" = "حدد أشكالًا متداخلة" +"Select points to edit their position, radius and mirroring" = "حدد نقاطًا لتحرير مواضعها وأنصاف أقطارها وتماثلها" +"Select slot" = "تحديد خانة المحتوى" +"Selection colors" = "ألوان التحديد" +"Selection" = "التحديد" +"Selection box, {w} by {h} at {x}, {y}: arrows move it, Shift+arrows or {cmd}+arrows size it, Enter selects, Escape cancels" = "مربع التحديد، {w} × {h} عند {x}، {y}: الأسهم للنقل، Shift+الأسهم أو {cmd}+الأسهم للحجم، Enter للتحديد، Escape للإلغاء" +"Selection box: arrows move it, Shift+arrows or {cmd}+arrows size it, Enter selects, Escape cancels" = "مربع التحديد: الأسهم للنقل، Shift+الأسهم أو {cmd}+الأسهم للحجم، Enter للتحديد، Escape للإلغاء" +"Send backward" = "إرجاع مستوى واحد" +"Send report" = "إرسال البلاغ" +"Send to back" = "إرسال إلى الخلف" +"Sep" = "سبتمبر" +"Server address (ws://host:47900/)" = "عنوان الخادم (ws://host:47900/)" +"Server address" = "عنوان الخادم" +"Server for online sharing" = "خادم المشاركة عبر الإنترنت" +"Server key" = "مفتاح الخادم" +"Set as default" = "تعيين كافتراضي" +"Set corner smoothing to 60%" = "تعيين تنعيم الزوايا إلى 60%" +"Set variable" = "تعيين متغير" +"Set variable mode" = "تعيين وضع المتغير" +"Set variable {name}" = "تعيين المتغير {name}" +"Set {name} to {value}" = "تعيين {name} إلى {value}" +"Shadows" = "الظلال" +"Shape" = "شكل" +"Shape builder" = "باني الأشكال" +"Shape tools" = "أدوات الأشكال" +"Shapes" = "الأشكال" +"Share" = "مشاركة" +"Share this file" = "مشاركة هذا الملف" +"Share with a code" = "المشاركة برمز" +"Share: live session, export" = "المشاركة: جلسة مباشرة، تصدير" +"Shared" = "مشارك" +"Shared: copy its code from the file's menu" = "مشارك: انسخ رمزه من قائمة الملف" +"Sharing a file needs the desktop app; here you can join one." = "تتطلب مشاركة ملف تطبيق سطح المكتب؛ ويمكنك الانضمام إلى ملف هنا." +"Sharing on the local network (online sharing is off: no server is set in Preferences)." = "المشاركة على الشبكة المحلية (المشاركة عبر الإنترنت متوقفة: لم يُحدد خادم في التفضيلات)." +"Sharing on your network · {people}" = "مشارك على شبكتك · {people}" +"Sharing online · {people}" = "مشارك على الإنترنت · {people}" +"Sharing stopped: the file stays on the server, open only to you" = "توقفت المشاركة؛ يبقى الملف على الخادم متاحًا لك وحدك" +"Show" = "إظهار" +"Show all templates" = "إظهار جميع القوالب" +"Show as grid" = "عرض كشبكة" +"Show as list" = "عرض كقائمة" +"Show autosaves" = "إظهار نسخ الحفظ التلقائي" +"Show behind transparent areas" = "إظهار خلف المناطق الشفافة" +"Show comments (Shift+C)" = "إظهار التعليقات (Shift+C)" +"Show device frame" = "إظهار إطار الجهاز" +"Show dimensions on objects" = "إظهار الأبعاد على الكائنات" +"Show hotspot hints" = "إظهار تلميحات مناطق التفاعل" +"Show in Explorer" = "إظهار في المستكشف" +"Show in Finder" = "إظهار في Finder" +"Show in folder" = "إظهار في المجلد" +"Show only this on the canvas" = "إظهار هذا فقط على لوحة الرسم" +"Show open" = "إظهار المفتوحة" +"Show section contents" = "إظهار محتويات القسم" +"Show this layer" = "إظهار هذه الطبقة" +"Show usage" = "إظهار الاستخدام" +"Show/Hide" = "إظهار/إخفاء" +"Show/Hide UI" = "إظهار/إخفاء الواجهة" +"Side by side" = "جنبًا إلى جنب" +"Sidebar" = "الشريط الجانبي" +"Simplify stroke" = "تبسيط الحد الخارجي" +"Size" = "الحجم" +"Size jitter" = "عشوائية الحجم" +"Skip ink" = "تجنب حبر الحروف" +"Slashed zero" = "صفر مشطوب" +"Slice" = "شريحة" +"Slices" = "الشرائح" +"Slide in" = "انزلاق للداخل" +"Slide out" = "انزلاق للخارج" +"Slot" = "خانة محتوى" +"Slot content" = "محتوى الخانة" +"Small capitals" = "أحرف كبيرة مصغّرة" +"Small caps" = "أحرف كبيرة مصغّرة" +"Smart animate" = "تحريك ذكي" +"Snap to pixel grid" = "محاذاة تلقائية إلى شبكة البكسلات" +"Social and slides" = "وسائل التواصل والشرائح" +"Social media" = "وسائل التواصل الاجتماعي" +"Social post sizes" = "أحجام منشورات التواصل" +"Soft light" = "ضوء ناعم" +"Solid" = "مصمت" +"Some variants have the same property values: give each one a unique combination" = "لبعض التنويعات قيم خصائص متطابقة؛ أعطِ كلًا منها تركيبة فريدة" +"Sort" = "فرز" +"Sort by" = "فرز حسب" +"Sort by date" = "فرز حسب التاريخ" +"Sort by page" = "فرز حسب الصفحة" +"Sort by {column}" = "فرز حسب {column}" +"Space around" = "مسافة حول العناصر" +"Space between" = "مسافة بين العناصر" +"Space drag" = "Space مع السحب" +"Space evenly" = "مسافات متساوية" +"Space+drag" = "Space+سحب" +"Spacing" = "التباعد" +"Spam, stolen work, abuse…" = "رسائل مزعجة أو عمل مسروق أو إساءة…" +"Speech bubble" = "فقاعة كلام" +"Splay" = "انفراج" +"Spotlight me" = "توجيه الأنظار إليّ" +"Spread" = "الانتشار" +"Square" = "مربع" +"Stamp" = "ختم" +"Stamps" = "الأختام" +"Standard" = "قياسي" +"Standard ligatures" = "وصلات حروف قياسية" +"Star" = "نجمة" +"Stars" = "النجوم" +"Start" = "بدء" +"Start ascending from / stop descending at" = "بداية التصاعد من / نهاية التنازل عند" +"Start from a blank canvas" = "البدء بلوحة رسم فارغة" +"Start from a template" = "البدء بقالب" +"Start on path" = "البداية على المسار" +"Start on the Home screen" = "البدء من الشاشة الرئيسية" +"Start point" = "نقطة البداية" +"Start sharing" = "بدء المشاركة" +"Start sharing with the Share button, then pass on the code it gives" = "ابدأ المشاركة بزر «مشاركة»، ثم أرسل الرمز الذي يظهر" +"Start vote" = "بدء التصويت" +"Starting to share…" = "جارٍ بدء المشاركة…" +"Status" = "الحالة" +"Sticky" = "ثابت عند التمرير" +"Sticky note" = "ملاحظة لاصقة" +"Sticky note colors" = "ألوان الملاحظات اللاصقة" +"Sticky notes" = "الملاحظات اللاصقة" +"Sticky notes, shapes and connectors" = "ملاحظات لاصقة وأشكال وموصلات" +"Stop" = "إيقاف" +"Stop following {name}" = "إيقاف متابعة {name}" +"Stop session" = "إنهاء الجلسة" +"Stop sharing" = "إيقاف المشاركة" +"Stop spotlighting" = "إيقاف توجيه الأنظار" +"Stop timer" = "إيقاف المؤقت" +"Stop {n} {hex}" = "نقطة التدرج {n} {hex}" +"Straight" = "مستقيم" +"Stretch" = "تمديد" +"Strikethrough" = "شطب" +"String" = "نص" +"Stroke" = "الحد الخارجي" +"Stroke style" = "نمط الحد الخارجي" +"Stroke weight" = "سُمك الحد الخارجي" +"Strokes" = "الحدود الخارجية" +"Style" = "النمط" +"Styles" = "الأنماط" +"Stylistic set 1" = "المجموعة الأسلوبية 1" +"Stylistic set 2" = "المجموعة الأسلوبية 2" +"Stylistic set 3" = "المجموعة الأسلوبية 3" +"Stylistic set 4" = "المجموعة الأسلوبية 4" +"Stylistic set 5" = "المجموعة الأسلوبية 5" +"Subtract" = "طرح" +"Subtracts" = "يطرح" +"Suffix" = "لاحقة" +"Suspend snapping while dragging" = "تعليق المحاذاة التلقائية أثناء السحب" +"Swap instance" = "استبدال النسخة المثيلة" +"Swap library: use another library's assets of the same names" = "استبدال المكتبة: استخدام أصول بنفس الأسماء من مكتبة أخرى" +"Swap orientation" = "تبديل الاتجاه" +"Swap overlay" = "استبدال الطبقة العائمة" +"Swap to {name}" = "استبدال بـ {name}" +"Swap width and height" = "تبديل العرض والارتفاع" +"Swapped instance" = "استُبدلت النسخة المثيلة" +"Swapped {n} assets" = { other = "استُبدلت أصول عددها {n}" } +"Swapped {n} assets; {missed} had no match and still use the old library" = { other = "استُبدلت أصول عددها {n}؛ بقي {missed} دون تطابق وتستخدم المكتبة القديمة" } +"Sweep" = "امتداد" +"System" = "النظام" +"Tab / Shift+Tab" = "Tab / Shift+Tab" +"Table" = "جدول" +"Tablet" = "جهاز لوحي" +"Tabular numbers" = "أرقام جدولية" +"Take the values from the first selected layer" = "أخذ القيم من أول طبقة محددة" +"Taper" = "تضييق تدريجي" +"Taper both ends" = "تضييق الطرفين تدريجيًا" +"Tell the server's operator what is wrong with it" = "أبلغ مشغّل الخادم بالمشكلة فيه" +"Temperature" = "درجة الحرارة" +"Template" = "قالب" +"Templates" = "القوالب" +"Terms" = "الشروط" +"Text" = "النص" +"Text align" = "محاذاة النص" +"Text content" = "محتوى النص" +"Text on a path" = "نص على مسار" +"Text size" = "حجم النص" +"Text style" = "نمط النص" +"Text styles" = "أنماط النص" +"Texts" = "النصوص" +"Texture" = "النسيج" +"The canvas previews colors in sRGB; exported PNG, JPG and WebP files are tagged Display P3." = "تُعاين الألوان على لوحة الرسم بفضاء sRGB؛ وتُوسم ملفات PNG وJPG وWebP المصدّرة بملف Display P3." +"The destination document is unavailable. Nothing was imported." = "المستند الوجهة غير متاح. لم يُستورد شيء." +"The destination document was closed. Nothing was imported." = "أُغلق المستند الوجهة. لم يُستورد شيء." +"The destination page was removed. Nothing was imported." = "أُزيلت الصفحة الوجهة. لم يُستورد شيء." +"The file is deleted from the server: nobody can open or join it from there again, and this can't be undone. Copies that are open stay with whoever has them." = "يُحذف الملف من الخادم؛ فلا يمكن لأحد فتحه أو الانضمام إليه من هناك مجددًا، ولا يمكن التراجع عن ذلك. تبقى النسخ المفتوحة لدى أصحابها." +"The file now holds another library" = "يحتوي الملف الآن على مكتبة أخرى" +"The file now holds another library (\"{name}\")" = "يحتوي الملف الآن على مكتبة أخرى («{name}»)" +"The files you shared or published online from this computer. They stay on their server until you remove them." = "الملفات التي شاركتها أو نشرتها على الإنترنت من هذا الحاسوب. تبقى على خادمها حتى تزيلها." +"The link carries the session's secret: share it only with people you invite." = "يحمل الرابط سر الجلسة؛ لا تشاركه إلا مع من تدعوهم." +"The name in your online files and on the server. The document inside keeps its own name." = "الاسم في ملفاتك عبر الإنترنت وعلى الخادم. يحتفظ المستند الداخلي باسمه الخاص." +"The selection uses several text styles: click to apply one" = "يستخدم التحديد عدة أنماط نصية؛ انقر لتطبيق نمط واحد" +"The server deletes this file if nobody opens it before {date}." = "يحذف الخادم هذا الملف إن لم يفتحه أحد قبل {date}." +"The whole file" = "الملف كاملًا" +"The window is too small for {size}%, so the interface is drawn at {drawn}%. Make the window larger to use {size}%." = "النافذة أصغر من أن تستوعب {size}%، لذا تُعرض الواجهة بنسبة {drawn}%. كبّر النافذة لاستخدام {size}%." +"Theme" = "السمة" +"There's no destination for that action" = "لا توجد وجهة لهذا الإجراء" +"Thickness" = "السُّمك" +"This branch can't be reviewed: {e}" = "تعذرت مراجعة هذا الفرع: {e}" +"This branch was merged or archived." = "دُمج هذا الفرع أو أُرشف." +"This computer only" = "هذا الحاسوب فقط" +"This computer remembers the owner token, so the file can be managed from the home screen's Online list. Copy it to manage the file from somewhere else: it is a password for this file and won't be shown again." = "يحفظ هذا الحاسوب رمز المالك لإدارة الملف من قائمة «على الإنترنت» في الشاشة الرئيسية. انسخه لإدارة الملف من مكان آخر؛ فهو كلمة مرور لهذا الملف ولن يُعرض مجددًا." +"This condition is edited as an expression" = "يُحرر هذا الشرط كتعبير" +"This file" = "هذا الملف" +"This file has unsaved changes" = "يحتوي هذا الملف على تغييرات غير محفوظة" +"This file is too large to join here (up to {mb} MB)" = "هذا الملف أكبر من أن يمكن الانضمام إليه هنا (الحد {mb} ميغابايت)" +"This file uses fonts that aren't installed on this computer. Their text is drawn in a fallback font until you install them." = "يستخدم هذا الملف خطوطًا غير مثبتة على هذا الحاسوب. يُعرض نصها بخط بديل حتى تثبتها." +"This file is on {server}, open only to you. Share it to let others in with a new code." = "هذا الملف على {server} ومتاح لك وحدك. شاركه ليتمكن الآخرون من الانضمام برمز جديد." +"This frame is new on the branch." = "هذا الإطار جديد في الفرع." +"This frame isn't on the branch." = "هذا الإطار غير موجود في الفرع." +"This link opens a website outside the prototype:" = "يفتح هذا الرابط موقعًا خارج النموذج التفاعلي:" +"This server is open to the public: no key needed." = "هذا الخادم متاح للعامة؛ لا يتطلب مفتاحًا." +"This server needs its key: add ?key=… to the address (`figcraft-server key` prints it on the server's machine)." = "يتطلب هذا الخادم مفتاحه: أضف ?key=… إلى العنوان (يعرضه `figcraft-server key` على جهاز الخادم)." +"This server takes files only with its key: see Advanced." = "لا يقبل هذا الخادم الملفات إلا بمفتاحه؛ راجع «متقدم»." +"Thumbs up" = "إعجاب" +"This version can't be read." = "تعذرت قراءة هذا الإصدار." +"This version doesn't have it: all of it is new." = "لا يحتوي هذا الإصدار عليه؛ فهو جديد بالكامل." +"Tidy up" = "ترتيب منظم" +"Tile" = "تجانب" +"Tile type" = "نوع التجانب" +"Timer" = "المؤقت" +"Tint" = "صبغة" +"Title" = "العنوان" +"Title case" = "حالة أحرف العنوان" +"To share this library with your team, publish the file to a server (Share ▸ Publish to server…), then publish the library there." = "لمشاركة هذه المكتبة مع فريقك، انشر الملف إلى خادم (مشاركة ▸ النشر إلى الخادم…)، ثم انشر المكتبة هناك." +"To the layer around it" = "إلى الطبقة المحيطة به" +"Toggle" = "تبديل" +"Toggle light/dark theme" = "تبديل السمة الفاتحة/الداكنة" +"Toggle visibility" = "تبديل الظهور" +"Tools" = "الأدوات" +"Top" = "أعلى" +"Top & bottom" = "أعلى وأسفل" +"Top left radius" = "نصف قطر الزاوية العلوية اليسرى" +"Top padding" = "الحشو العلوي" +"Top right radius" = "نصف قطر الزاوية العلوية اليمنى" +"Transform" = "تحويل" +"Triangle" = "مثلث" +"Triangle arrow" = "سهم مثلث" +"Trigger" = "المحفّز" +"Trigger layer" = "طبقة التحفيز" +"True" = "صحيح" +"Truncate text" = "اختصار النص" +"Truncate with an ellipsis" = "اختصار بعلامة حذف" +"Try again" = "إعادة المحاولة" +"Try another search or filter." = "جرّب بحثًا أو مرشحًا آخر." +"Try another search, or browse templates." = "جرّب بحثًا آخر أو استعرض القوالب." +"Try another word, or look at every kind." = "جرّب كلمة أخرى أو اعرض جميع الأنواع." +"Turn a layer into a component, reuse it, and change every copy at once" = "حوّل طبقة إلى مكوّن وأعد استخدامه لتغيّر جميع نسخه في آن واحد" +"Two digits" = "رقمان" +"Type" = "النوع" +"Type settings" = "إعدادات الطباعة" +"Type the join code you were given, or paste an invite link." = "أدخل رمز الانضمام الذي تلقيته أو الصق رابط دعوة." +"Typography" = "الطباعة" +"Underline" = "تسطير" +"Undo takes back only your own changes; what others changed since stays." = "يلغي التراجع تغييراتك وحدها؛ وتبقى تغييرات الآخرين اللاحقة." +"Ungroup" = "فك التجميع" +"Uniform" = "موحّد" +"Union" = "اتحاد" +"Unions" = "اتحادات" +"Unknown — treated as sRGB" = "غير معروف — يُعامل كـ sRGB" +"Unread" = "غير مقروء" +"Unresolve" = "إعادة فتح" +"Unsaved changes" = "تغييرات غير محفوظة" +"Unsaved changes in {names}. Save them before closing?" = "تغييرات غير محفوظة في {names}. هل تريد حفظها قبل الإغلاق؟" +"Unsaved changes: save first ({save}), or close the tab with {alt}-click to discard" = "تغييرات غير محفوظة: احفظ أولًا ({save})، أو أغلق علامة التبويب بالنقر مع {alt} لتجاهلها" +"Unsaved changes: save first, or close again with {key} to discard" = "تغييرات غير محفوظة: احفظ أولًا، أو أغلق مجددًا مع {key} لتجاهلها" +"Up" = "لأعلى" +"Update check is not supported in the web browser." = "التحقق من التحديثات غير مدعوم في المتصفح." +"Update plugin" = "تحديث الإضافة" +"Update" = "تحديث" +"Update from main" = "تحديث من الملف الرئيسي" +"Update from selection" = "تحديث من التحديد" +"Updated {components} and {styles}" = "حُدّث {components} و{styles}" +"Updated {name}" = "حُدّث {name}" +"Updating the graphics driver often helps. To use OpenGL only, start FigCraft from a Command Prompt with:" = "غالبًا ما يفيد تحديث تعريف الرسوميات. لاستخدام OpenGL وحده، شغّل FigCraft من موجه الأوامر باستخدام:" +"Updating the graphics driver often helps. WGPU_BACKEND (vulkan, gl, metal) names another graphics API to try." = "غالبًا ما يفيد تحديث تعريف الرسوميات. يحدد WGPU_BACKEND (vulkan أو gl أو metal) واجهة رسوميات أخرى لتجربتها." +"Uploads this file to a FigCraft server and keeps this tab in sync with it. You get a link to edit and a link to view." = "يرفع هذا الملف إلى خادم FigCraft ويبقي علامة التبويب متزامنة معه. تحصل على رابط للتحرير وآخر للعرض." +"Uppercase" = "أحرف كبيرة" +"Use a fixed value" = "استخدام قيمة ثابتة" +"Use an expression, e.g. count + 1" = "استخدام تعبير، مثل count + 1" +"Use as mask" = "استخدام كقناع" +"Use auto layout" = "استخدام التخطيط التلقائي" +"Use number keys for opacity" = "استخدام مفاتيح الأرقام للعتامة" +"Use the .figcraft or .fig extension." = "استخدم الامتداد .figcraft أو .fig." +"Use the layer's fill" = "استخدام تعبئة الطبقة" +"Use your browser's zoom to change the interface size." = "استخدم تكبير المتصفح لتغيير حجم الواجهة." +"Used in {files} · {instances}" = "مستخدم في {files} · {instances}" +"Username" = "اسم المستخدم" +"Value" = "القيمة" +"Uses variables: each layer shows them in its own mode" = "يستخدم متغيرات؛ تعرضها كل طبقة وفق وضعها الخاص" +"Variable" = "متغير" +"Variable collections" = "مجموعات المتغيرات" +"Variable modes" = "أوضاع المتغيرات" +"Variable width" = "عرض متغير" +"Variables" = "المتغيرات" +"Variables JSON…" = "ملف JSON للمتغيرات…" +"Variables store reusable values (colours, numbers, strings, booleans) with modes such as Light and Dark." = "تخزن المتغيرات قيمًا قابلة لإعادة الاستخدام (ألوانًا وأرقامًا ونصوصًا وقيمًا منطقية) بأوضاع مثل الفاتح والداكن." +"Variant" = "تنويعة" +"Vector" = "متجه" +"Vectors" = "المتجهات" +"Version" = "الإصدار" +"Version history" = "سجل الإصدارات" +"Version {version}" = "الإصدار {version}" +"Version {v} · {components} · {styles} · {variables}" = "الإصدار {v} · {components} · {styles} · {variables}" +"Vertical" = "رأسي" +"Vertical align" = "محاذاة رأسية" +"Vertical hex" = "سداسي رأسي" +"Vertical padding" = "الحشو الرأسي" +"Vertical spacing" = "التباعد الرأسي" +"Vertical trim" = "القص الرأسي" +"View" = "عرض" +"View link" = "رابط العرض" +"View link copied" = "نُسخ رابط العرض" +"View only" = "للعرض فقط" +"View only: you see every change as it happens but can't edit. Leave to keep a copy you can edit." = "للعرض فقط: ترى كل تغيير فور حدوثه دون إمكانية التحرير. غادر للاحتفاظ بنسخة يمكنك تحريرها." +"Viewing “{name}”" = "جارٍ عرض «{name}»" +"Violet" = "بنفسجي" +"Visibility" = "الظهور" +"Visible" = "ظاهر" +"Vivid" = "زاهٍ" +"Votes per person" = "الأصوات لكل شخص" +"Voting session" = "جلسة تصويت" +"WGPU_BACKEND is set and names the graphics API to use; unsetting it lets FigCraft choose." = "المتغير WGPU_BACKEND مضبوط ويحدد واجهة الرسوميات المستخدمة؛ ألغِ ضبطه ليختار FigCraft تلقائيًا." +"Warm" = "دافئ" +"Watch" = "ساعة يد" +"Wavy" = "متموج" +"Web" = "الويب" +"Websites" = "المواقع" +"WebSocket URL" = "عنوان WebSocket" +"WebSocket URL copied" = "نُسخ عنوان WebSocket" +"Wedge" = "إسفين" +"Weekly planner" = "مخطط أسبوعي" +"Weight" = "الوزن" +"What changed since a saved version" = "ما تغير منذ إصدار محفوظ" +"What you try here changes this preview and the code below, not the file" = "تُغيّر تجاربك هنا المعاينة والكود أدناه، ولا تُغيّر الملف" +"What changed since it was marked ready for dev" = "ما تغير منذ تحديده كجاهز للتطوير" +"What is wrong with this file? The server's operator gets your report." = "ما المشكلة في هذا الملف؟ يتلقى مشغّل الخادم بلاغك." +"What it's for" = "الغرض منه" +"What this changed from isn't known: it changed before FigCraft kept a copy of ready-for-dev frames. Resolve the change (or mark it ready again) to compare from now on." = "الحالة السابقة لهذا التغيير غير معروفة؛ فقد حدث قبل أن يحتفظ FigCraft بنسخة من الإطارات الجاهزة للتطوير. حُلّ التغيير أو حدده كجاهز مجددًا لتبدأ المقارنة من الآن." +"When marked ready" = "عند تحديده كجاهز" +"While hovering" = "أثناء التحويم" +"While pressing" = "أثناء الضغط" +"White" = "أبيض" +"Who runs it, its terms and how long it keeps files" = "الجهة المشغّلة وشروطها ومدة احتفاظها بالملفات" +"Whole screen" = "الشاشة كاملة" +"Why it changed" = "سبب التغيير" +"Widget" = "عنصر واجهة" +"Widgets" = "عناصر الواجهة" +"Width" = "العرض" +"Width point" = "نقطة عرض" +"Width profile" = "منحنى العرض" +"Wireframe kit" = "طقم مخطط هيكلي" +"With the layers' export settings" = "بإعدادات تصدير الطبقات" +"Wrap" = "التفاف" +"Wrap in new section" = "إحاطة بقسم جديد" +"Yellow" = "أصفر" +"Yesterday" = "أمس" +"You" = "أنت" +"You'll get the shared file as a new tab and edit it together." = "ستحصل على الملف المشارك في علامة تبويب جديدة لتحريره مع الآخرين." +"You're spotlighting: everyone follows your view" = "توجّه الأنظار إليك؛ يتابع الجميع عرضك" +"Your copy of the file stays open" = "تبقى نسختك من الملف مفتوحة" +"Your copy stays open; the file stays on the server" = "تبقى نسختك مفتوحة؛ ويبقى الملف على الخادم" +"Your name" = "اسمك" +"Your name in comments" = "اسمك في التعليقات" +"Your system asks for reduced motion: animations stay off." = "يطلب نظامك تقليل الحركة؛ تبقى التحريكات متوقفة." +"Z" = "Z" +"Z to A" = "من Z إلى A" +"Zoom" = "التكبير" +"Zoom around the pointer" = "التكبير حول المؤشر" +"Zoom device to fill window" = "تكبير الجهاز لملء النافذة" +"Zoom in" = "تكبير" +"Zoom out" = "تصغير" +"Zoom to 100%" = "تكبير إلى 100%" +"Zoom to 200%" = "تكبير إلى 200%" +"Zoom to 50%" = "تكبير إلى 50%" +"Zoom to fit" = "تكبير للملاءمة" +"Zoom to selection" = "تكبير إلى التحديد" +"Zoom tool: click to zoom in, drag an area" = "أداة التكبير: انقر للتكبير أو اسحب منطقة" +"Zoom tool: zoom out" = "أداة التكبير: تصغير" +"and {n} more" = { other = "والمزيد، العدد: {n}" } +"bleed marks" = "علامات نزف الطباعة" +"by {author}" = "بواسطة {author}" +"call any command its access allows" = "استدعاء أي أمر تسمح به صلاحياتها" +"call only: {commands}" = "استدعاء هذه الأوامر فقط: {commands}" +"can edit the document" = "يمكنها تحرير المستند" +"can save files" = "يمكنها حفظ الملفات" +"conditional prototype actions nested too deeply were skipped" = "تم تخطي إجراءات النموذج التفاعلي الشرطية ذات التداخل العميق جدًا" +"conditional prototype actions with conditions that can't be evaluated were skipped" = "تم تخطي إجراءات النموذج التفاعلي الشرطية التي يتعذر تقييم شروطها" +"connector label background was skipped: style data is missing" = "تم تخطي خلفية تسمية الموصل لغياب بيانات النمط" +"connector label was skipped: background bounds are invalid" = "تم تخطي تسمية الموصل لعدم صلاحية حدود الخلفية" +"connector label was skipped: background transform is invalid" = "تم تخطي تسمية الموصل لعدم صلاحية تحويل الخلفية" +"connector label was skipped: composed text transform is invalid" = "تم تخطي تسمية الموصل لعدم صلاحية تحويل النص المركب" +"connector label was skipped: derived background bounds are missing" = "تم تخطي تسمية الموصل لغياب حدود الخلفية المشتقة" +"connector label was skipped: derived text bounds are missing" = "تم تخطي تسمية الموصل لغياب حدود النص المشتقة" +"connector label was skipped: text bounds are invalid" = "تم تخطي تسمية الموصل لعدم صلاحية حدود النص" +"connector label was skipped: text style data is missing" = "تم تخطي تسمية الموصل لغياب بيانات نمط النص" +"connector label was skipped: text transform is invalid" = "تم تخطي تسمية الموصل لعدم صلاحية تحويل النص" +"connector labels were skipped" = "تم تخطي تسميات الموصلات" +"connector layers import as static frame/vector snapshots with labels when present; live endpoint bindings are not retained" = "تُستورد طبقات الموصلات كلقطات ثابتة من إطارات أو متجهات مع تسمياتها إن وجدت؛ ولا تُحفظ روابط نقاط النهاية الحية" +"connector snapshot vector data is missing; connector was left empty" = "بيانات متجه لقطة الموصل مفقودة؛ تُرك الموصل فارغًا" +"connectors whose ends can't be placed are empty" = "الموصلات التي يتعذر تحديد مواضع نهاياتها فارغة" +"crop marks" = "علامات الاقتصاص" +"damaged vector geometry was skipped" = "تم تخطي هندسة المتجه التالفة" +"damaged vector networks import as outlines" = "تُستورد شبكات المتجهات التالفة كمخططات خارجية" +"development: {path}" = "التطوير: {path}" +"document children other than pages were skipped" = "تم تخطي عناصر المستند التابعة التي ليست صفحات" +"duplicate grid track sizing entries use equal tracks" = "تستخدم إدخالات أحجام مسارات الشبكة المكررة مسارات متساوية" +"e.g. count + 1" = "مثل count + 1" +"e.g. count >= 3 and not done" = "مثل count >= 3 and not done" +"elbowed and curved connectors without a saved path import as straight lines" = "تُستورد الموصلات الزاوية والمنحنية التي ليس لها مسار محفوظ كخطوط مستقيمة" +"entries without a node type were skipped" = "تم تخطي الإدخالات التي ليس لها نوع عقدة" +"figcraft:// links from a browser, chat or email open this app and join the session." = "تفتح روابط figcraft:// من المتصفح أو الدردشة أو البريد هذا التطبيق وتنضم إلى الجلسة." +"filled areas of a vector with their own fill use the layer's fill" = "تستخدم مناطق المتجه المعبأة ذات التعبئة الخاصة تعبئة الطبقة" +"from {server}" = "من {server}" +"gamepad triggers without exactly one known controller button were skipped" = "تم تخطي محفزات ذراع الألعاب التي لا تحدد زرًا معروفًا واحدًا بالضبط" +"grid track list exceeds 1000 entries; the tracks use the default equal sizing" = "تتجاوز قائمة مسارات الشبكة 1000 إدخال؛ تستخدم المسارات الأحجام الافتراضية المتساوية" +"grid track sizing is unsupported or malformed; affected tracks use equal sizing" = "أحجام مسارات الشبكة غير مدعومة أو غير سليمة؛ تستخدم المسارات المتأثرة أحجامًا متساوية" +"grid track sizing list exceeds 1000 entries; the tracks use the default equal sizing" = "تتجاوز قائمة أحجام مسارات الشبكة 1000 إدخال؛ تستخدم المسارات الأحجام الافتراضية المتساوية" +"hidden" = "مخفي" +"iOS" = "iOS" +"image filters are ambiguous because both filter containers are present; filter conversion was skipped" = "مرشحات الصورة ملتبسة لوجود حاويتي المرشحات معًا؛ تم تخطي تحويل المرشحات" +"image filters use FigCraft's approximate renderer" = "تستخدم مرشحات الصورة مصيّر FigCraft التقريبي" +"instance swap properties whose default component isn't in the file were skipped" = "تم تخطي خصائص استبدال النسخة المثيلة التي لا يوجد مكوّنها الافتراضي في الملف" +"instance swap properties whose default component was past the layer limit were skipped" = "تم تخطي خصائص استبدال النسخة المثيلة التي تجاوز مكوّنها الافتراضي حد الطبقات" +"instances inside their own main component were imported as frames" = "استُوردت النسخ المثيلة الموجودة داخل مكوناتها الرئيسية كإطارات" +"instances of components that aren't in the file show no layers" = "لا تعرض النسخ المثيلة لمكونات غير موجودة في الملف أي طبقات" +"instances of components that aren't in the file were imported as frames" = "استُوردت النسخ المثيلة لمكونات غير موجودة في الملف كإطارات" +"instances that would nest a component inside itself were imported as frames" = "استُوردت النسخ المثيلة التي قد تُداخل المكوّن داخل نفسه كإطارات" +"instances whose component was past the layer limit were imported as frames" = "استُوردت النسخ المثيلة التي تجاوز مكوّنها حد الطبقات كإطارات" +"instances without a main component were imported as empty frames" = "استُوردت النسخ المثيلة التي ليس لها مكوّن رئيسي كإطارات فارغة" +"invalid internal .fig text path data was ignored" = "تم تجاهل بيانات مسار النص الداخلية غير الصالحة في .fig" +"invalid or oversized vector networks import as outlines" = "تُستورد شبكات المتجهات غير الصالحة أو الكبيرة جدًا كمخططات خارجية" +"invalid or oversized vector path data was skipped" = "تم تخطي بيانات مسارات المتجهات غير الصالحة أو الكبيرة جدًا" +"just now" = "الآن" +"key triggers without a supported key were skipped" = "تم تخطي محفزات المفاتيح التي لا تتضمن مفتاحًا مدعومًا" +"key up triggers import as key presses" = "تُستورد محفزات إفلات المفتاح كضغطات مفتاح" +"layers without a position were placed at their parent's origin" = "وُضعت الطبقات التي ليس لها موضع عند نقطة أصل العنصر الأب" +"layers without a type were skipped" = "تم تخطي الطبقات التي ليس لها نوع" +"legacy image filter container is unsupported; filter conversion was skipped" = "حاوية مرشحات الصورة القديمة غير مدعومة؛ تم تخطي تحويل المرشحات" +"locked" = "مقفل" +"malformed image filters container was skipped" = "تم تخطي حاوية مرشحات الصورة غير السليمة" +"malformed image paintFilter container was skipped" = "تم تخطي حاوية paintFilter غير السليمة للصورة" +"malformed slot content assignment was skipped" = "تم تخطي تعيين محتوى الخانة غير السليم" +"no bleed" = "دون نزف طباعة" +"nobody else here yet" = "لم ينضم أحد غيرك بعد" +"non-default slot settings are not represented and were skipped" = "إعدادات الخانات غير الافتراضية غير ممثلة وتم تخطي" +"now" = "الآن" +"offer files to save if it asks to (you choose where each one goes)" = "عرض ملفات للحفظ عند طلبها (تختار وجهة كل ملف)" +"only in a text style or variable" = "في نمط نص أو متغير فقط" +"or" = "أو" +"point stroke joins were preserved; dashed or variable-width strokes render with the layer join" = "حُفظت وصلات حدود النقاط؛ وتُرسم الحدود المتقطعة أو متغيرة العرض بوصلة الطبقة" +"preferred slot component keys cannot be resolved to file nodes and were skipped" = "تم تخطي مفاتيح المكونات المفضلة للخانات لتعذر ربطها بعقد الملف" +"prototype actions of unknown types were skipped" = "تم تخطي إجراءات النموذج التفاعلي ذات الأنواع غير المعروفة" +"prototype actions without a destination in the file were skipped" = "تم تخطي إجراءات النموذج التفاعلي التي لا وجهة لها في الملف" +"prototype expressions on variables that aren't in the variables JSON were skipped" = "تم تخطي تعبيرات النموذج التفاعلي على متغيرات غير موجودة في ملف JSON للمتغيرات" +"prototype expressions with unsupported functions were skipped" = "تم تخطي تعبيرات النموذج التفاعلي ذات الدوال غير المدعومة" +"prototype interactions without supported actions were skipped" = "تم تخطي تفاعلات النموذج التي لا تتضمن إجراءات مدعومة" +"prototype navigations of unknown types were skipped" = "تم تخطي انتقالات النموذج التفاعلي ذات الأنواع غير المعروفة" +"prototype transitions of unknown types play instantly" = "تعمل انتقالات النموذج التفاعلي ذات الأنواع غير المعروفة فورًا" +"prototype triggers of unknown types were skipped" = "تم تخطي محفزات النموذج التفاعلي ذات الأنواع غير المعروفة" +"put a widget on the canvas" = "وضع عنصر واجهة على لوحة الرسم" +"read and edit the document" = "قراءة المستند وتحريره" +"read the document" = "قراءة المستند" +"reads the document" = "تقرأ المستند" +"set-variable actions on variables that aren't in the variables JSON were skipped" = "تم تخطي إجراءات تعيين المتغيرات غير الموجودة في ملف JSON للمتغيرات" +"set-variable actions with values that can't be evaluated were skipped" = "تم تخطي إجراءات تعيين المتغيرات التي يتعذر تقييم قيمها" +"set-variable actions with values that don't fit the variable were skipped" = "تم تخطي إجراءات تعيين المتغيرات التي لا تناسب قيمها المتغير" +"set-variable actions without a value were skipped" = "تم تخطي إجراءات تعيين المتغيرات التي لا قيمة لها" +"set-variable-mode actions on collections or modes that aren't in the variables JSON were skipped" = "تم تخطي إجراءات تعيين أوضاع المتغيرات لمجموعات أو أوضاع غير موجودة في ملف JSON للمتغيرات" +"slot content assignment target is missing or is not slot content" = "هدف تعيين محتوى الخانة مفقود أو ليس محتوى خانة" +"slot content assignment uses the empty GUID sentinel and was skipped" = "يستخدم تعيين محتوى الخانة علامة GUID فارغة وتم تخطي" +"slot layers without a matching slot property were imported as frames" = "استُوردت طبقات الخانات التي ليس لها خاصية خانة مطابقة كإطارات" +"some vector points refer to point settings missing from the file; they use the layer's joins and plain corners" = "تشير بعض نقاط المتجهات إلى إعدادات نقاط مفقودة من الملف؛ تستخدم وصلات الطبقة وزوايا عادية" +"some vector segments refer to style settings missing from the file; they use the layer's stroke" = "تشير بعض مقاطع المتجهات إلى إعدادات أنماط مفقودة من الملف؛ تستخدم الحد الخارجي للطبقة" +"stale or invalid grid track sizing entries were ignored" = "تم تجاهل إدخالات أحجام مسارات الشبكة القديمة أو غير الصالحة" +"stars and polygons without point counts or geometry use the default point count" = "تستخدم النجوم والمضلعات التي لا تحدد عدد نقاط أو هندسة عدد النقاط الافتراضي" +"style settings of some vector segments aren't supported; those segments use the layer's stroke" = "إعدادات نمط بعض مقاطع المتجهات غير مدعومة؛ تستخدم هذه المقاطع الحد الخارجي للطبقة" +"text path underline or strikethrough decoration is not rendered" = "لا تُرسم زخرفة التسطير أو الشطب للنص على المسار" +"text style overrides refer to missing table entries" = "تشير تجاوزات نمط النص إلى إدخالات جدول مفقودة" +"the file has no pages" = "لا يحتوي الملف على صفحات" +"the plugin" = "الإضافة" +"the variables JSON has no `variableCollections` (expected the local variables response) and was ignored" = "لا يتضمن ملف JSON للمتغيرات `variableCollections` (المتوقع استجابة المتغيرات المحلية)، لذا تم تجاهله" +"this session only" = "هذه الجلسة فقط" +"unknown component property types were skipped" = "تم تخطي أنواع خصائص المكونات غير المعروفة" +"variable aliases to variables that aren't in the variables JSON (or of another type) were skipped" = "تم تخطي الأسماء المستعارة لمتغيرات غير موجودة في ملف JSON للمتغيرات أو ذات نوع مختلف" +"variable bindings to properties the layer doesn't have were skipped" = "تم تخطي روابط المتغيرات بخصائص لا تملكها الطبقة" +"variable bindings to variables that aren't in the variables JSON (library variables) were skipped" = "تم تخطي روابط المتغيرات بمتغيرات غير موجودة في ملف JSON للمتغيرات (متغيرات المكتبة)" +"variable bindings were skipped: the file JSON has no variable definitions (pass the local variables JSON as `variables`, or embed its `meta` next to the file JSON)" = "تم تخطي روابط المتغيرات؛ لا يحتوي JSON الملف على تعريفات متغيرات (مرر JSON المتغيرات المحلية كـ `variables`، أو ضمّن `meta` الخاص به بجوار JSON الملف)" +"variable bindings whose variable type doesn't fit the property were skipped" = "تم تخطي روابط المتغيرات التي لا يناسب نوعها الخاصية" +"variable collections without modes were skipped" = "تم تخطي مجموعات المتغيرات التي ليس لها أوضاع" +"variable mode lookups in prototype expressions that aren't a variable and one of its modes were skipped" = "تم تخطي عمليات البحث عن أوضاع المتغيرات في تعبيرات النموذج التي لا تحدد متغيرًا وأحد أوضاعه" +"variable modes of collections that aren't in the file were skipped" = "تم تخطي أوضاع متغيرات مجموعات غير موجودة في الملف" +"variable modes of collections that aren't in the variables JSON were skipped" = "تم تخطي أوضاع متغيرات مجموعات غير موجودة في ملف JSON للمتغيرات" +"variable values that don't match their type (or composed colours) were skipped" = "تم تخطي قيم المتغيرات غير المطابقة لأنواعها أو الألوان المركّبة" +"variables of unknown types were skipped" = "تم تخطي المتغيرات ذات الأنواع غير المعروفة" +"variables whose collection isn't in the variables JSON were skipped" = "تم تخطي المتغيرات التي لا توجد مجموعاتها في ملف JSON للمتغيرات" +"variables without readable values were skipped" = "تم تخطي المتغيرات التي لا تتوفر لها قيم مقروءة" +"vector points with unknown stroke joins use the layer join" = "تستخدم نقاط المتجهات ذات وصلات الحدود غير المعروفة وصلة الطبقة" +"vectors without geometry are empty" = "المتجهات التي ليس لها هندسة فارغة" +"vectors without geometry are empty (export the file JSON with geometry=paths)" = "المتجهات التي ليس لها هندسة فارغة (صدّر JSON الملف مع geometry=paths)" +"very long text was cut to 1,048,576 characters" = "اختُصر النص الطويل جدًا إلى 1,048,576 حرفًا" +"very long vector paths were skipped" = "تم تخطي مسارات المتجهات الطويلة جدًا" +"video actions are not supported and were skipped" = "إجراءات الفيديو غير مدعومة وتم تخطي" +"video triggers are not supported and were skipped" = "محفزات الفيديو غير مدعومة وتم تخطي" +"yesterday" = "أمس" +"{instances} in {files}" = "{instances} في {files}" +"{language}: draft translation, waiting for a native speaker's review." = "{language}: مسودة ترجمة تنتظر مراجعة متحدث أصلي باللغة." +"{length} bleed" = "نزف طباعة {length}" +"{month} {day}, {year}" = "{day} {month}، {year}" +"{name} cleared from the list" = "أُزيل {name} من القائمة" +"{name} is forgotten on this computer; the file stays on {server}" = "نُسي {name} على هذا الحاسوب؛ يبقى الملف على {server}" +"{name} is on the server." = "{name} على الخادم." +"{name} is spotlighting" = "{name} يوجّه الأنظار إليه" +"{name} is too large to open in the browser (over 512 MB)." = "{name} أكبر من أن يُفتح في المتصفح (يتجاوز 512 ميغابايت)." +"{name}\nClick to apply to the selection" = "{name}\nانقر للتطبيق على التحديد" +"{name}\nDrag onto the canvas, or click to place in the middle of the view.\nHold Alt (Option) while dropping onto an instance to swap it." = "{name}\nاسحب إلى لوحة الرسم أو انقر للوضع في وسط العرض.\nاضغط على Alt (Option) أثناء الإفلات على نسخة مثيلة لاستبدالها." +"{name} (from {library})" = "{name} (من {library})" +"{name} (you)" = "{name} (أنت)" +"{name} ({layers} layers)" = "{name} (الطبقات: {layers})" +"{name} ({tag}): {min} – {max}, default {default}. Double-click the slider to go back to the style's value; Escape while dragging cancels." = "{name} ({tag}): {min} – {max}، الافتراضي {default}. انقر على شريط التمرير مرتين للعودة إلى قيمة النمط؛ واضغط Escape أثناء السحب للإلغاء." +"{name} from {path}" = "{name} من {path}" +"{name} was removed from the server" = "أُزيل {name} من الخادم" +"{name} · deleted on main" = "{name} · محذوف في الملف الرئيسي" +"{name} · deleted on the branch" = "{name} · محذوف في الفرع" +"{name} · not published" = "{name} · غير منشور" +"{name} · on a server" = "{name} · على خادم" +"{name} · published version {v}" = "{name} · الإصدار المنشور {v}" +"{name} · version {v} on the server" = "{name} · الإصدار {v} على الخادم" +"{name}, in a live session" = "{name}، في جلسة مباشرة" +"{name}, online, open only to you" = "{name}، على الإنترنت ومتاح لك وحدك" +"{name}, {kind}, {w} by {h}, selected" = "{name}، {kind}، {w} × {h}، محدد" +"{n} added" = { other = "عدد العناصر المضافة: {n}" } +"{n} autosave versions" = { other = "عدد إصدارات الحفظ التلقائي: {n}" } +"{n} changed" = { other = "عدد العناصر المتغيرة: {n}" } +"{n} columns" = { other = "عدد الأعمدة: {n}" } +"{n} components" = { other = "عدد المكونات: {n}" } +"{n} components and styles have newer versions" = { other = "تتوفر إصدارات أحدث لمكونات وأنماط عددها {n}" } +"{n} conflicts to resolve" = { other = "عدد التعارضات المطلوب حلها: {n}" } +"{n} days ago" = { other = "منذ مدة بالأيام قدرها {n}" } +"{n} files" = { other = "عدد الملفات: {n}" } +"{n} hours ago" = { other = "منذ مدة بالساعات قدرها {n}" } +"{n} instances" = { other = "عدد النسخ المثيلة: {n}" } +"{n} layers" = { other = "عدد الطبقات: {n}" } +"{n} layers as one file" = { other = "طبقات في ملف واحد، العدد: {n}" } +"{n} layers selected" = { other = "عدد الطبقات المحددة: {n}" } +"{n} layers · {parts}" = { other = "عدد الطبقات: {n} · {parts}" } +"{n} matches" = { other = "عدد التطابقات: {n}" } +"{n} min" = "{n} د" +"{n} minutes ago" = { other = "منذ مدة بالدقائق قدرها {n}" } +"{n} months ago" = { other = "منذ مدة بالأشهر قدرها {n}" } +"{n} more notes omitted from this report" = { other = "عدد الملاحظات الإضافية المحذوفة من هذا التقرير: {n}" } +"{n} of {total}" = "{n} من {total}" +"{n} people joined" = { other = "عدد المنضمين: {n}" } +"{n} preferred components" = { other = "عدد المكونات المفضلة: {n}" } +"{n} ready" = { other = "عدد العناصر الجاهزة: {n}" } +"{n} removed" = { other = "عدد العناصر المحذوفة: {n}" } +"{n} replies" = { other = "عدد الردود: {n}" } +"{n} rows" = { other = "عدد الصفوف: {n}" } +"{n} styles" = { other = "عدد الأنماط: {n}" } +"{n} text layers" = { other = "عدد طبقات النص: {n}" } +"{n} variables" = { other = "عدد المتغيرات: {n}" } +"{n} votes" = { other = "عدد الأصوات: {n}" } +"{n} votes left" = { other = "عدد الأصوات المتبقية: {n}" } +"{n} weeks ago" = { other = "منذ مدة بالأسابيع قدرها {n}" } +"{n} years ago" = { other = "منذ مدة بالسنوات قدرها {n}" } +"{n}d" = "{n} ي" +"{n}h" = "{n} س" +"{n}m" = "{n} د" +"{n}w" = "{n} أ" +"{page}, nothing selected" = "{page}، لا يوجد تحديد" +"{percent}%" = "{percent}%" +"{profile} (current)" = "{profile} (الحالي)" +"{property} is its value; {property ? \"a\" : \"b\"} picks a string. Other {…} stays as written." = "{property} هي قيمتها؛ ويختار {property ? \"a\" : \"b\"} نصًا. تبقى {…} الأخرى كما كُتبت." +"{server} can't say what became of your files (it is older than this app)." = "لا يستطيع {server} تحديد ما حدث لملفاتك (إصداره أقدم من هذا التطبيق)." +"{server} · No longer on the server" = "{server} · لم يعد موجودًا على الخادم" +"{server} · {shared} · Opened {date}" = "{server} · {shared} · فُتح {date}" +"{tool} hold {key}" = "{tool} اضغط مطولًا على {key}" +"{value} isn't a colour" = "{value} ليس لونًا" +"{when} · edited" = "{when} · عُدّل" +"← ↑ → ↓" = "← ↑ → ↓" +"← → ↑ ↓" = "← → ↑ ↓" +"←" = "←" +"→, Space or N" = "→، Space أو N" +"↵" = "↵" +"⇥ / ⇧⇥" = "⇥ / ⇧⇥" +"⌘ arrows" = "⌘ الأسهم" +"⌘ click" = "⌘ نقر" +"⌘ scroll" = "⌘ تمرير" +"⌥ drag" = "⌥ سحب" + +[commands] +"align.bottom" = "محاذاة لأسفل" +"align.hcenter" = "محاذاة المراكز الأفقية" +"align.left" = "محاذاة لليسار" +"align.right" = "محاذاة لليمين" +"align.top" = "محاذاة لأعلى" +"align.vcenter" = "محاذاة المراكز الرأسية" +"annotation.add" = "إضافة تعليق توضيحي" +"annotation.addCategory" = "إضافة فئة تعليقات توضيحية" +"annotation.categories" = "فئات التعليقات التوضيحية" +"annotation.edit" = "تحرير التعليق التوضيحي" +"annotation.editCategory" = "تحرير فئة التعليقات التوضيحية" +"annotation.list" = "سرد التعليقات التوضيحية" +"annotation.remove" = "إزالة التعليق التوضيحي" +"annotation.removeCategory" = "حذف فئة التعليقات التوضيحية" +"app.actions" = "الإجراءات" +"app.preferences" = "التفضيلات" +"arrange.back" = "إرسال إلى الخلف" +"arrange.backward" = "إرجاع مستوى واحد" +"arrange.forward" = "تقديم مستوى واحد" +"arrange.front" = "إحضار إلى المقدمة" +"arrange.packH" = "رص أفقي" +"arrange.packV" = "رص رأسي" +"arrange.reorder" = "إعادة ترتيب التحديد" +"arrange.roundToPixels" = "تقريب إلى البكسلات" +"arrange.spacing" = "التباعد" +"arrange.tidy" = "ترتيب منظم" +"board.connector" = "موصل" +"board.ink" = "ضربة قلم التحديد" +"board.label" = "تسمية الموصل" +"board.nextSticky" = "الملاحظة اللاصقة التالية" +"board.reattach" = "إعادة إرفاق الموصل" +"board.setColor" = "لون اللوحة" +"board.setStyle" = "نمط اللوحة" +"board.shape" = "شكل بنص" +"board.stamp" = "ختم" +"board.sticky" = "ملاحظة لاصقة" +"board.table" = "جدول" +"board.tableEdit" = "تحرير الجدول" +"board.template" = "قالب لوحة" +"board.templates" = "سرد قوالب اللوحات" +"board.timer" = "المؤقت" +"board.timerState" = "حالة المؤقت" +"board.vote" = "جلسة تصويت" +"board.voteResults" = "نتائج التصويت" +"bool.exclude" = "استبعاد التحديد" +"bool.flatten" = "تسطيح المجموعة المنطقية" +"bool.intersect" = "تقاطع التحديد" +"bool.subtract" = "طرح التحديد" +"bool.union" = "اتحاد التحديد" +"branch.archive" = "أرشفة الفرع" +"branch.create" = "إنشاء فرع" +"branch.list" = "سرد الفروع" +"branch.merge" = "دمج الفرع" +"branch.open" = "فتح الفرع" +"branch.review" = "مراجعة الفرع" +"branch.updateFromMain" = "تحديث من الملف الرئيسي" +"codeConnect.export" = "تصدير روابط الكود" +"codeConnect.import" = "استيراد روابط الكود" +"codeConnect.remove" = "فصل الربط بالكود" +"codeConnect.set" = "ربط بالكود" +"collab.cursor" = "إظهار المؤشر عند" +"collab.cursorChat" = "دردشة المؤشر" +"collab.diff" = "إظهار تغييرات المزامنة" +"collab.files" = "ملفاتك على الإنترنت" +"collab.follow" = "متابعة" +"collab.forgetFile" = "نسيان ملف الإنترنت" +"collab.host" = "بدء جلسة مباشرة" +"collab.join" = "الانضمام إلى جلسة مباشرة" +"collab.leave" = "مغادرة الجلسة المباشرة" +"collab.manageFile" = "إدارة الملف المنشور" +"collab.openFile" = "فتح ملف إنترنت" +"collab.peers" = "الأشخاص في هذا الملف" +"collab.publish" = "النشر إلى الخادم" +"collab.recoverFile" = "استعادة ملف الإنترنت" +"collab.registerLinks" = "فتح روابط الدعوة في FigCraft" +"collab.removePerson" = "إزالة من الجلسة" +"collab.report" = "الإبلاغ عن الملف لمشغّل الخادم" +"collab.serverInfo" = "معلومات الخادم" +"collab.share" = "المشاركة برمز انضمام" +"collab.spotlight" = "توجيه الأنظار إليّ" +"collab.stop" = "إنهاء الجلسة المباشرة" +"command.batch" = "تشغيل عدة أوامر" +"comment.add" = "إضافة تعليق" +"comment.delete" = "حذف التعليق" +"comment.edit" = "تحرير التعليق" +"comment.link" = "نسخ رابط التعليق" +"comment.list" = "سرد التعليقات" +"comment.markRead" = "تحديد التعليق كمقروء" +"comment.move" = "نقل التعليق" +"comment.next" = "التعليق التالي" +"comment.open" = "فتح التعليق" +"comment.people" = "الأشخاص في التعليقات" +"comment.react" = "التفاعل التعبيري مع التعليق" +"comment.reply" = "الرد على التعليق" +"comment.resolve" = "تحديد التعليق كمحلول" +"comment.zoom" = "تكبير إلى التعليقات" +"component.addProperty" = "إضافة خاصية مكوّن" +"component.addVariant" = "إضافة تنويعة" +"component.bindProperty" = "ربط الطبقة بخاصية" +"component.combineVariants" = "جمع كتنويعات" +"component.create" = "إنشاء مكوّن" +"component.createMultiple" = "إنشاء مكونات متعددة" +"component.deleteProperty" = "حذف خاصية المكوّن" +"component.detach" = "فصل النسخة المثيلة" +"component.editProperty" = "تحرير خاصية المكوّن" +"component.exposeInstance" = "إتاحة نسخة مثيلة متداخلة" +"component.goToMain" = "الانتقال إلى المكوّن الرئيسي" +"component.hideWhenPublishing" = "إخفاء عند النشر" +"component.list" = "سرد المكونات" +"component.makeSlot" = "إنشاء خانة محتوى" +"component.playground" = "ساحة تجربة المكونات" +"component.properties" = "خصائص المكوّن" +"component.pushChanges" = "دفع التغييرات إلى المكوّن الرئيسي" +"component.removeSlot" = "إزالة خانة المحتوى" +"component.resetInstance" = "إعادة تعيين جميع التغييرات" +"component.resetOverride" = "إعادة تعيين التجاوز" +"component.restoreMain" = "استعادة المكوّن الرئيسي" +"data.fill" = "ملء النسخ بالبيانات" +"dev.compare" = "مقارنة التغييرات" +"dev.focus" = "عرض التركيز" +"dev.resolveChange" = "حل التغيير" +"dev.unfocus" = "الخروج من عرض التركيز" +"devMode.addMeasurement" = "إضافة قياس" +"devMode.measurements" = "سرد القياسات" +"devMode.removeMeasurement" = "إزالة القياس" +"devResource.add" = "إضافة مورد للمطور" +"devResource.edit" = "تحرير مورد المطور" +"devResource.list" = "سرد موارد المطورين" +"devResource.remove" = "إزالة مورد المطور" +"distribute.horizontal" = "توزيع المسافات الأفقية" +"distribute.vertical" = "توزيع المسافات الرأسية" +"doc.home" = "الرئيسية" +"doc.list" = "سرد المستندات" +"doc.nextTab" = "علامة التبويب التالية" +"doc.previousTab" = "علامة التبويب السابقة" +"doc.switch" = "تبديل المستند" +"edit.copy" = "نسخ" +"edit.copyAsCss" = "نسخ بصيغة CSS" +"edit.copyAsPng" = "نسخ بصيغة PNG" +"edit.copyAsSvg" = "نسخ بصيغة SVG" +"edit.copyAsText" = "نسخ كنص" +"edit.copyLink" = "نسخ رابط التحديد" +"edit.copyProperties" = "نسخ الخصائص" +"edit.cut" = "قص" +"edit.delete" = "حذف" +"edit.duplicate" = "تكرار" +"edit.findReplace" = "بحث واستبدال" +"edit.paste" = "لصق" +"edit.pasteDesignLayers" = "لصق طبقات التصميم" +"edit.pasteOver" = "لصق فوق التحديد" +"edit.pasteProperties" = "لصق الخصائص" +"edit.pasteReplace" = "لصق للاستبدال" +"edit.pickColor" = "التقاط لون" +"edit.redo" = "إعادة" +"edit.repeat" = "تكرار آخر أمر" +"edit.setDefaultProperties" = "تعيين الخصائص الافتراضية" +"edit.undo" = "تراجع" +"effect.add" = "إضافة تأثير" +"effect.copy" = "نسخ التأثير" +"effect.move" = "نقل التأثير" +"effect.paste" = "لصق التأثير" +"effect.remove" = "إزالة التأثير" +"effect.set" = "تعيين التأثير" +"export.add" = "إضافة إعداد تصدير" +"export.remove" = "إزالة إعداد التصدير" +"export.update" = "تحرير إعداد التصدير" +"file.close" = "إغلاق علامة التبويب" +"file.colorProfile" = "ملف تعريف اللون" +"file.duplicate" = "تكرار الملف" +"file.export" = "تصدير" +"file.exportFramesPdf" = "تصدير الإطارات إلى PDF" +"file.exportLayers" = "تصدير الطبقات" +"file.exportSvg" = "تصدير التحديد بصيغة SVG" +"file.import" = "استيراد" +"file.markSaved" = "تحديد كمحفوظ" +"file.moveTab" = "نقل علامة التبويب" +"file.new" = "ملف تصميم جديد" +"file.newBoard" = "لوحة جديدة" +"file.newFromTemplate" = "جديد من قالب" +"file.open" = "فتح" +"file.openRecent" = "فتح الأخيرة" +"file.placeImage" = "وضع صورة" +"file.recover" = "استعادة الملف" +"file.rename" = "إعادة تسمية الملف" +"file.revert" = "العودة إلى المحفوظ" +"file.save" = "حفظ" +"file.saveAs" = "حفظ باسم" +"file.saveVersion" = "حفظ في سجل الإصدارات" +"file.versionHistory" = "إظهار سجل الإصدارات" +"fill.add" = "إضافة تعبئة" +"fill.copy" = "نسخ التعبئة" +"fill.move" = "نقل التعبئة" +"fill.paste" = "لصق التعبئة" +"fill.pattern" = "تعبئة بنمط متكرر" +"fill.remove" = "إزالة التعبئة" +"fill.set" = "تعيين التعبئة" +"frame.create" = "إنشاء إطار" +"frame.presets" = "سرد إعدادات الإطارات المسبقة" +"frame.swapOrientation" = "تبديل الاتجاه" +"grid.add" = "إضافة شبكة تخطيط" +"grid.move" = "نقل شبكة التخطيط" +"grid.remove" = "إزالة شبكة التخطيط" +"guide.add" = "إضافة دليل" +"guide.clear" = "إزالة جميع الأدلة" +"guide.move" = "نقل الدليل" +"guide.remove" = "إزالة الدليل" +"guide.select" = "تحديد دليل" +"help.about" = "حول FigCraft" +"help.gettingStarted" = "بدء الاستخدام" +"help.page" = "صفحة المساعدة" +"help.shortcuts" = "اختصارات لوحة المفاتيح" +"image.adjust" = "ضبط الصورة" +"image.deletePreset" = "حذف إعداد الصورة المسبق" +"image.place" = "وضع صورة" +"image.presets" = "إعدادات الصور المسبقة" +"image.savePreset" = "حفظ إعداد الصورة المسبق" +"inspect.assets" = "فحص الأصول" +"inspect.code" = "كود الطبقة" +"inspect.componentCode" = "كود المكوّن" +"inspect.properties" = "فحص الخصائص" +"inspect.readyForDev" = "جاهز للتطوير" +"instance.create" = "إنشاء نسخة مثيلة" +"instance.exposed" = "النسخ المثيلة المتداخلة المتاحة" +"instance.place" = "وضع نسخة مثيلة" +"instance.resetSlot" = "إعادة تعيين خانة المحتوى" +"instance.setProperties" = "تعيين خصائص النسخة المثيلة" +"instance.slotInsert" = "إدراج في خانة المحتوى" +"instance.swap" = "استبدال النسخة المثيلة" +"instance.swapAt" = "استبدال النسخة المثيلة عند نقطة" +"layers.collapseAll" = "طي الطبقات" +"layout.add" = "إضافة تخطيط تلقائي" +"layout.remove" = "إزالة التخطيط التلقائي" +"layout.setTrack" = "تعيين حجم مسار الشبكة" +"layout.suggest" = "اقتراح تخطيط تلقائي" +"libraries.open" = "المكتبات" +"libraries.publish" = "نشر المكتبة…" +"library.acceptUpdates" = "قبول تحديثات المكتبة" +"library.add" = "إضافة مكتبة" +"library.aliasVariable" = "إنشاء اسم مستعار لمتغير مكتبة" +"library.applyStyle" = "تطبيق نمط مكتبة" +"library.bindVariable" = "ربط متغير مكتبة" +"library.extendCollection" = "توسيع مجموعة مكتبة" +"library.import" = "استيراد مكوّن مكتبة" +"library.importVariable" = "استيراد متغير مكتبة" +"library.list" = "سرد المكتبات" +"library.place" = "وضع مكوّن مكتبة" +"library.publish" = "نشر المكتبة" +"library.publishToServer" = "نشر المكتبة إلى الخادم" +"library.remove" = "إزالة المكتبة" +"library.setVariableMode" = "تعيين وضع متغير المكتبة" +"library.swap" = "استبدال المكتبة" +"library.swapAt" = "استبدال النسخة المثيلة بمكوّن مكتبة" +"library.updates" = "تحديثات المكتبة" +"library.usage" = "استخدام المكتبة" +"measure.distances" = "قياس المسافات" +"measure.padding" = "قياس حشو التخطيط التلقائي" +"node.create" = "إنشاء طبقة" +"node.get" = "جلب طبقة" +"node.reorder" = "إعادة ترتيب الطبقة" +"node.reparent" = "نقل الطبقة إلى داخل" +"node.set" = "تعيين الخصائص" +"object.batchRename" = "إعادة تسمية جماعية" +"object.convertToFrame" = "تحويل إلى إطار" +"object.convertToGroup" = "تحويل إلى مجموعة" +"object.convertToSection" = "تحويل إلى قسم" +"object.flipH" = "قلب أفقي" +"object.flipV" = "قلب رأسي" +"object.frameSelection" = "إحاطة التحديد بإطار" +"object.group" = "تجميع التحديد" +"object.hideOthers" = "إخفاء الطبقات الأخرى" +"object.mask" = "استخدام كقناع" +"object.moveToPage" = "نقل إلى الصفحة" +"object.opacityKeys" = "العتامة بمفاتيح الأرقام" +"object.rasterize" = "تحويل التحديد إلى صورة نقطية" +"object.releaseMask" = "تحرير القناع" +"object.removeFill" = "إزالة التعبئة" +"object.removeFrame" = "إزالة الإطار" +"object.removeStroke" = "إزالة الحد الخارجي" +"object.rename" = "إعادة تسمية" +"object.resizeToFit" = "تغيير الحجم للملاءمة" +"object.rotate180" = "تدوير 180°" +"object.rotateLeft" = "تدوير 90° لليسار" +"object.rotateRight" = "تدوير 90° لليمين" +"object.setThumbnail" = "تعيين كصورة مصغرة" +"object.swapFillStroke" = "تبديل التعبئة والحد الخارجي" +"object.toggleLock" = "قفل/إلغاء قفل التحديد" +"object.toggleVisible" = "إظهار/إخفاء التحديد" +"object.ungroup" = "فك تجميع التحديد" +"object.wrapInSection" = "إحاطة بقسم جديد" +"page.add" = "إضافة صفحة" +"page.delete" = "حذف الصفحة" +"page.duplicate" = "تكرار الصفحة" +"page.list" = "سرد الصفحات" +"page.move" = "نقل الصفحة" +"page.rename" = "إعادة تسمية الصفحة" +"page.select" = "الانتقال إلى الصفحة" +"page.setBackground" = "خلفية الصفحة" +"paint.documentColors" = "ألوان المستند" +"plugin.close" = "إغلاق لوحة الإضافة" +"plugin.directory.install" = "تثبيت إضافة من الدليل" +"plugin.directory.list" = "استعراض دليل الإضافات" +"plugin.directory.publish" = "نشر الإضافة في الدليل" +"plugin.directory.unpublish" = "إلغاء نشر الإضافة من الدليل" +"plugin.event" = "استخدام عنصر تحكم في لوحة الإضافة" +"plugin.import" = "استيراد إضافة من ملف التعريف…" +"plugin.list" = "سرد الإضافات" +"plugin.remove" = "إزالة الإضافة" +"plugin.run" = "تشغيل الإضافة" +"plugin.ui" = "لوحة الإضافة" +"plugins.manage" = "إدارة الإضافات…" +"plugins.runLast" = "تشغيل آخر إضافة" +"pref.autoSave" = "حفظ الملفات تلقائيًا" +"pref.highlightHover" = "تمييز الطبقات عند التحويم" +"pref.keepTool" = "إبقاء الأداة محددة بعد الاستخدام" +"pref.language" = "لغة الواجهة" +"pref.nudge" = "مقدار الإزاحة الطفيفة" +"pref.numberKeysOpacity" = "استخدام مفاتيح الأرقام للعتامة" +"pref.publishServer" = "خادم المشاركة عبر الإنترنت" +"pref.reduceMotion" = "تقليل الحركة" +"pref.renameDuplicates" = "إعادة تسمية الطبقات المكررة" +"pref.showDimensions" = "إظهار الأبعاد على الكائنات" +"pref.startOnHome" = "البدء من الشاشة الرئيسية" +"pref.uiScale" = "حجم الواجهة" +"pref.userName" = "اسمك في التعليقات" +"proto.action.add" = "إضافة إجراء للنموذج التفاعلي" +"proto.action.move" = "إعادة ترتيب إجراء النموذج التفاعلي" +"proto.action.remove" = "إزالة إجراء النموذج التفاعلي" +"proto.action.set" = "تحرير إجراء النموذج التفاعلي" +"proto.closePreview" = "إغلاق معاينة النموذج التفاعلي" +"proto.conditional.addBlock" = "إضافة «وإلا إذا» / «وإلا»" +"proto.conditional.removeBlock" = "إزالة «إذا» / «وإلا إذا» / «وإلا»" +"proto.conditional.setCondition" = "تحرير الشرط" +"proto.evaluate" = "تقييم تعبير النموذج التفاعلي" +"proto.flow.add" = "إضافة نقطة بداية تدفق" +"proto.flow.remove" = "إزالة التدفق" +"proto.flow.rename" = "إعادة تسمية التدفق" +"proto.interaction.add" = "إضافة تفاعل" +"proto.interaction.clear" = "إزالة جميع التفاعلات" +"proto.interaction.remove" = "إزالة التفاعل" +"proto.interaction.set" = "تحرير التفاعل" +"proto.linkNotice" = "تنبيه قبل الانتقال إلى رابط خارجي" +"proto.present" = "عرض" +"proto.presentOptions" = "خيارات العرض التقديمي" +"proto.preview" = "فتح معاينة النموذج التفاعلي" +"proto.settings" = "إعدادات النموذج التفاعلي" +"section.toggleContents" = "إخفاء/إظهار محتويات القسم" +"select.add" = "إضافة إلى التحديد" +"select.all" = "تحديد الكل" +"select.area" = "تحديد منطقة" +"select.byName" = "تحديد الطبقات حسب الاسم" +"select.children" = "تحديد العناصر التابعة" +"select.inverse" = "عكس التحديد" +"select.layersAt" = "الطبقات عند نقطة" +"select.matching" = "تحديد الطبقات المطابقة" +"select.next" = "تحديد العنصر الشقيق التالي" +"select.none" = "إلغاء التحديد" +"select.parent" = "تحديد العنصر الأب" +"select.previous" = "تحديد العنصر الشقيق السابق" +"select.remove" = "إزالة من التحديد" +"select.sameEffect" = "تحديد نفس التأثير" +"select.sameFill" = "تحديد نفس التعبئة" +"select.sameFont" = "تحديد نفس الخط" +"select.sameInstance" = "تحديد نفس النسخة المثيلة" +"select.sameProperties" = "تحديد نفس الخصائص" +"select.sameStroke" = "تحديد نفس الحد الخارجي" +"select.sameText" = "تحديد نفس خصائص النص" +"select.set" = "تحديد" +"selection.applyColorStyle" = "تطبيق نمط لون التحديد" +"selection.bindColorVariable" = "تطبيق متغير لون التحديد" +"selection.colors" = "ألوان التحديد" +"selection.detachColor" = "فصل لون التحديد" +"selection.selectColor" = "تحديد الطبقات باللون" +"selection.setPaint" = "تغيير لون التحديد" +"shape.arrow" = "سهم" +"shape.ellipse" = "شكل بيضاوي" +"shape.line" = "خط" +"shape.polygon" = "مضلع" +"shape.rectangle" = "مستطيل" +"shape.star" = "نجمة" +"shapeBuilder.merge" = "دمج المناطق" +"shapeBuilder.mode" = "وضع باني الأشكال" +"shapeBuilder.regions" = "مناطق باني الأشكال" +"shapeBuilder.remove" = "إزالة المناطق" +"stroke.add" = "إضافة حد خارجي" +"stroke.brush" = "فرشاة" +"stroke.copy" = "نسخ الحد الخارجي" +"stroke.move" = "نقل الحد الخارجي" +"stroke.paste" = "لصق الحد الخارجي" +"stroke.remove" = "إزالة الحد الخارجي" +"stroke.set" = "تعيين الحد الخارجي" +"stroke.widthProfile" = "منحنى العرض" +"style.apply" = "تطبيق نمط" +"style.bind" = "ربط متغير في نمط" +"style.create" = "إنشاء نمط" +"style.delete" = "حذف النمط" +"style.detach" = "فصل النمط" +"style.duplicate" = "تكرار النمط" +"style.list" = "سرد الأنماط" +"style.move" = "نقل الأنماط" +"style.renameFolder" = "إعادة تسمية مجلد الأنماط" +"style.update" = "تحرير النمط" +"template.list" = "سرد القوالب" +"text.alignCenter" = "محاذاة للوسط أفقيًا" +"text.alignJustify" = "ضبط المحاذاة" +"text.alignLeft" = "محاذاة لليسار" +"text.alignRight" = "محاذاة لليمين" +"text.bold" = "غامق" +"text.bulletList" = "قائمة نقطية" +"text.case" = "حالة الأحرف" +"text.caseLower" = "أحرف صغيرة" +"text.caseOriginal" = "حالة الأحرف الأصلية" +"text.caseSmallCaps" = "أحرف كبيرة مصغّرة" +"text.caseTitle" = "حالة أحرف العنوان" +"text.caseUpper" = "أحرف كبيرة" +"text.create" = "النص" +"text.decoration" = "زخرفة النص" +"text.edit.begin" = "تحرير النص" +"text.edit.caret" = "تعيين مؤشر الكتابة" +"text.edit.end" = "إنهاء تحرير النص" +"text.edit.insert" = "كتابة نص" +"text.edit.key" = "مفتاح نصي" +"text.edit.preedit" = "إدخال نص مركّب (IME)" +"text.edit.selectLine" = "تحديد سطر" +"text.edit.selectWord" = "تحديد كلمة" +"text.edit.selection" = "تحديد النص" +"text.endPreview" = "إنهاء معاينة النص" +"text.fit" = "ملاءمة النص مع مربعه" +"text.fonts" = "سرد الخطوط" +"text.italic" = "مائل" +"text.lineHeightDown" = "تقليل ارتفاع السطر" +"text.lineHeightUp" = "زيادة ارتفاع السطر" +"text.link" = "إنشاء رابط" +"text.listIndent" = "زيادة المسافة البادئة للقائمة" +"text.listOutdent" = "تقليل المسافة البادئة للقائمة" +"text.listStyle" = "نمط القائمة" +"text.loadFont" = "تحميل ملف خط" +"text.maxLines" = "أقصى عدد للأسطر" +"text.missingFonts" = "خطوط مفقودة" +"text.numberList" = "قائمة مرقمة" +"text.onPath" = "نص على مسار" +"text.paragraphIndent" = "المسافة البادئة للفقرة" +"text.paragraphSpacing" = "تباعد الفقرات" +"text.pathOptions" = "خيارات النص على المسار" +"text.preview" = "معاينة تغيير النص" +"text.refit" = "ملاءمة النص مع الخطوط" +"text.removeFromPath" = "إزالة النص من المسار" +"text.rescanFonts" = "إعادة فحص الخطوط المثبتة" +"text.set" = "تعيين النص" +"text.setFeatures" = "مزايا OpenType" +"text.setVariations" = "محاور الخط المتغير" +"text.sizeDown" = "تقليل حجم الخط" +"text.sizeUp" = "زيادة حجم الخط" +"text.strikethrough" = "شطب" +"text.style" = "تنسيق نطاق نصي" +"text.trackingDown" = "تقليل تباعد الحروف" +"text.trackingUp" = "زيادة تباعد الحروف" +"text.underline" = "تسطير" +"text.weightDown" = "تقليل وزن الخط" +"text.weightUp" = "زيادة وزن الخط" +"tool.arrow" = "سهم" +"tool.comment" = "تعليق" +"tool.connector" = "موصل" +"tool.ellipse" = "شكل بيضاوي" +"tool.eraser" = "ممحاة" +"tool.frame" = "إطار" +"tool.hand" = "اليد" +"tool.highlighter" = "قلم تمييز" +"tool.line" = "خط" +"tool.marker" = "قلم تحديد" +"tool.move" = "نقل" +"tool.pen" = "قلم" +"tool.pencil" = "قلم رصاص" +"tool.pencilBrush" = "فرشاة قلم الرصاص" +"tool.place" = "وضع باستخدام الأداة" +"tool.polygon" = "مضلع" +"tool.rectangle" = "مستطيل" +"tool.scale" = "المقياس" +"tool.scaleAnchor" = "مرساة التحجيم" +"tool.section" = "قسم" +"tool.set" = "اختيار أداة" +"tool.shape" = "الأشكال" +"tool.shapeBuilder" = "باني الأشكال" +"tool.slice" = "شريحة" +"tool.stamp" = "ختم" +"tool.star" = "نجمة" +"tool.sticky" = "ملاحظة لاصقة" +"tool.text" = "النص" +"tool.textOnPath" = "نص على مسار" +"transform.move" = "نقل" +"transform.moveTo" = "نقل إلى" +"transform.nudge" = "إزاحة طفيفة" +"transform.nudgeSize" = "تغيير الحجم بإزاحة طفيفة" +"transform.resize" = "تغيير الحجم" +"transform.rotate" = "تدوير" +"transform.rotationOrigin" = "نقل مركز الدوران" +"transform.scale" = "المقياس" +"transform.setRotationOrigin" = "تعيين مركز الدوران" +"variable.addMode" = "إضافة وضع" +"variable.bind" = "ربط متغير" +"variable.create" = "إنشاء متغير" +"variable.createCollection" = "إنشاء مجموعة متغيرات" +"variable.delete" = "حذف المتغير" +"variable.deleteCollection" = "حذف المجموعة" +"variable.duplicate" = "تكرار المتغير" +"variable.export" = "تصدير المتغيرات" +"variable.import" = "استيراد المتغيرات" +"variable.list" = "سرد المتغيرات" +"variable.moveMode" = "نقل الوضع" +"variable.removeMode" = "حذف الوضع" +"variable.renameCollection" = "إعادة تسمية المجموعة" +"variable.renameMode" = "إعادة تسمية الوضع" +"variable.resetOverride" = "إعادة تعيين تجاوز المتغير" +"variable.set" = "تعيين قيمة المتغير" +"variable.setMode" = "تعيين وضع المتغير" +"variable.update" = "تحرير المتغير" +"vector.create" = "متجه" +"vector.deleteHeal" = "حذف التحديد ووصل المسار" +"vector.edit.addVertex" = "إضافة نقطة" +"vector.edit.begin" = "تحرير المتجه" +"vector.edit.bend" = "ثني المقطع" +"vector.edit.bounds" = "حدود النقاط المحددة" +"vector.edit.connect" = "وصل النقاط" +"vector.edit.cornerRadius" = "نصف قطر زاوية النقطة" +"vector.edit.cut" = "قطع المسار" +"vector.edit.delete" = "حذف النقاط" +"vector.edit.end" = "إنهاء التحرير" +"vector.edit.erase" = "محو" +"vector.edit.lasso" = "تحديد حر" +"vector.edit.mirroring" = "تماثل المقابض" +"vector.edit.moveHandles" = "نقل المقابض" +"vector.edit.moveVertices" = "نقل النقاط" +"vector.edit.nudge" = "إزاحة النقاط قليلًا" +"vector.edit.paint" = "دلو الطلاء" +"vector.edit.pen" = "نقطة قلم" +"vector.edit.penEnd" = "إنهاء مسار القلم" +"vector.edit.position" = "موضع النقطة" +"vector.edit.resize" = "تغيير حجم النقاط" +"vector.edit.rotate" = "تدوير النقاط" +"vector.edit.select" = "تحديد نقاط" +"vector.edit.selectAll" = "تحديد جميع النقاط" +"vector.edit.setHandle" = "تعيين المقبض" +"vector.edit.smooth" = "تنعيم النقاط أو جعلها حادة" +"vector.edit.state" = "حالة تحرير المتجه" +"vector.edit.strokeCap" = "نهاية الحد عند النقطة" +"vector.edit.strokeJoin" = "وصلة الحد عند النقطة" +"vector.edit.tool" = "أداة تحرير المتجه" +"vector.edit.transform" = "تحويل النقاط" +"vector.edit.widthPoint" = "نقطة عرض" +"vector.fillRule" = "تعيين قاعدة التعبئة" +"vector.flatten" = "تسطيح" +"vector.join" = "وصل التحديد" +"vector.offset" = "إزاحة المسار" +"vector.outlineStroke" = "تحويل الحد الخارجي إلى شكل" +"vector.reverse" = "عكس اتجاه المسار" +"vector.reverseLoop" = "عكس الحلقة" +"vector.simplify" = "تبسيط المتجه" +"vector.smoothJoin" = "وصل التحديد بسلاسة" +"version.autosave" = "حفظ إصدار تلقائيًا" +"version.delete" = "حذف الإصدار" +"version.duplicate" = "تكرار الإصدار" +"version.exitPreview" = "العودة إلى الإصدار الحالي" +"version.list" = "سرد الإصدارات" +"version.preview" = "عرض الإصدار" +"version.rename" = "إعادة تسمية الإصدار" +"version.restore" = "استعادة الإصدار" +"view.assets" = "لوحة الأصول" +"view.comments" = "التعليقات" +"view.contextMenu" = "إظهار قائمة السياق" +"view.design" = "لوحة التصميم" +"view.designPrototype" = "التبديل بين التصميم والنموذج التفاعلي" +"view.devMode" = "وضع المطور" +"view.frameOutlines" = "مخططات الإطارات الخارجية" +"view.fullscreen" = "ملء الشاشة" +"view.get" = "جلب العرض" +"view.layers" = "لوحة الطبقات" +"view.layoutGrids" = "شبكات التخطيط" +"view.leftSidebar" = "إظهار/إخفاء الشريط الجانبي الأيسر" +"view.maskOutlines" = "مخططات الأقنعة الخارجية" +"view.multiplayerCursors" = "مؤشرات المشاركين" +"view.nextFrame" = "تكبير إلى الإطار التالي" +"view.nextPage" = "الصفحة التالية" +"view.nextRegion" = "التركيز على المنطقة التالية" +"view.outlines" = "المخططات الخارجية" +"view.outlinesHiddenLayers" = "تضمين الطبقات المخفية في المخططات الخارجية" +"view.outlinesObjectBounds" = "تضمين حدود الكائن في المخططات الخارجية" +"view.outlinesSelection" = "المخططات الخارجية للتحديد" +"view.pan" = "تحريك العرض" +"view.panelWidths" = "إعادة تعيين عروض اللوحات" +"view.pixelGrid" = "شبكة البكسلات" +"view.pixelPreview" = "معاينة البكسلات" +"view.prevFrame" = "تكبير إلى الإطار السابق" +"view.prevPage" = "الصفحة السابقة" +"view.previousRegion" = "التركيز على المنطقة السابقة" +"view.proofSrgb" = "محاكاة ألوان sRGB" +"view.prototype" = "لوحة النموذج التفاعلي" +"view.rulers" = "المساطر" +"view.set" = "تعيين العرض" +"view.slices" = "الشرائح" +"view.snapGeometry" = "محاذاة تلقائية إلى الهندسة" +"view.snapObjects" = "محاذاة تلقائية إلى الكائنات" +"view.snapPixel" = "محاذاة تلقائية إلى شبكة البكسلات" +"view.themeDark" = "السمة الداكنة" +"view.themeLight" = "السمة الفاتحة" +"view.themeSystem" = "اتباع سمة النظام" +"view.toggleUi" = "إظهار/إخفاء الواجهة" +"view.zoom100" = "تكبير إلى 100%" +"view.zoom200" = "تكبير إلى 200%" +"view.zoom50" = "تكبير إلى 50%" +"view.zoomAt" = "أداة التكبير" +"view.zoomFit" = "تكبير للملاءمة" +"view.zoomIn" = "تكبير" +"view.zoomOut" = "تصغير" +"view.zoomSelection" = "تكبير إلى التحديد" +"widget.click" = "نقر عنصر واجهة" +"widget.insert" = "إدراج عنصر واجهة" +"widget.list" = "سرد عناصر الواجهة" +"widget.menu" = "قائمة عنصر الواجهة" +"widget.setText" = "تحرير حقل عنصر الواجهة" +"window.focus" = "إحضار النافذة إلى المقدمة" +"window.new" = "نافذة جديدة" + +[menu] +"bool.exclude" = "استبعاد" +"bool.flatten" = "تسطيح" +"bool.intersect" = "تقاطع" +"bool.subtract" = "طرح" +"bool.union" = "اتحاد" +"file.duplicate" = "تكرار" +"file.import" = "استيراد من ملف…" +"file.rename" = "إعادة تسمية" +"libraries.open" = "فتح المكتبات" +"select.sameEffect" = "تأثير" +"select.sameFill" = "تعبئة" +"select.sameFont" = "الخط" +"select.sameInstance" = "نسخة مثيلة" +"select.sameProperties" = "الخصائص" +"select.sameStroke" = "الحد الخارجي" +"select.sameText" = "خصائص النص" +"text.alignCenter" = "محاذاة النص للوسط" +"text.alignJustify" = "ضبط محاذاة النص" +"text.alignLeft" = "محاذاة النص لليسار" +"text.alignRight" = "محاذاة النص لليمين" +"view.assets" = "الأصول" +"view.design" = "التصميم" +"view.layers" = "الطبقات" +"view.outlines" = "إظهار المخططات الخارجية" +"view.outlinesHiddenLayers" = "تضمين الطبقات المخفية" +"view.outlinesObjectBounds" = "تضمين حدود الكائن" +"view.outlinesSelection" = "إظهار المخططات الخارجية للتحديد" +"view.prototype" = "النموذج التفاعلي" +"view.themeDark" = "داكن" +"view.themeLight" = "فاتح" +"view.themeSystem" = "اتباع النظام" diff --git a/crates/ui-egui/src/cjk.rs b/crates/ui-egui/src/cjk.rs index fab93990..ccd54975 100644 --- a/crates/ui-egui/src/cjk.rs +++ b/crates/ui-egui/src/cjk.rs @@ -101,6 +101,11 @@ fn shows(code: &str, web: bool) -> bool { if code.split('-').next() == Some("ka") { return figcraft_text::face_with_char('ა', &["Noto Sans Georgian"]).is_some(); } + if code.split('-').next() == Some("ar") { + // Web cannot borrow the desktop's Arabic faces. Its current font budget excludes + // Arabic; keep the catalog out until an embedded Arabic fallback is supplied. + return figcraft_text::face_with_char('ع', &["Noto Sans Arabic"]).is_some(); + } let need = language(code); need == 0 || samples(need, 0).iter().all(|(c, _)| figcraft_text::face_with_char(*c, &["BIZ UDPGothic", "Noto Sans CJK SC"]).is_some()) } @@ -186,6 +191,14 @@ mod tests { assert!(shows("en", true) && shows("tr", true)); } + #[test] + fn the_web_offers_arabic_only_with_its_face() { + assert!(shows("ar", false)); + let face = figcraft_text::face_with_char('ع', &["Noto Sans Arabic"]).is_some(); + assert_eq!(shows("ar", true), face); + assert_eq!(shows("ar-SA", true), face); + } + /// The UI language's script leads the fallback order; the others follow. #[test] fn the_ui_language_script_comes_first() { diff --git a/crates/ui-egui/src/i18n/tests.rs b/crates/ui-egui/src/i18n/tests.rs index d1fedef8..8ba884f0 100644 --- a/crates/ui-egui/src/i18n/tests.rs +++ b/crates/ui-egui/src/i18n/tests.rs @@ -492,6 +492,50 @@ fn georgian_is_picked_for_georgian_locales() { } } +#[test] +fn arabic_tags_and_count_neutral_forms() { + let ar = LANGS.iter().position(|l| l.code == "ar").unwrap(); + assert_eq!(LANGS[ar].name, "العربية"); + for tag in ["ar", "ar-SA", "ar_EG.UTF-8", "ar_AE@arabic"] { + assert_eq!(resolve("system", Some(tag)), ar, "{tag}"); + assert_eq!(resolve(tag, None), ar, "{tag}"); + } + let counts = [0, 1, 2, 3, 10, 11, 99, 100, 102, 103, 111, 200, 1000]; + for (key, text) in LANGS[ar].ui { + if let Text::Plural { one, few, many, other } = text { + assert!(one.is_none() && few.is_none() && many.is_none(), "{key}: count-neutral wording uses only other"); + for n in counts { + assert_eq!(counted(ar, key, n), *other, "{key}, {n}"); + assert!(fill(other, &[("n", &n)]).contains(&n.to_string())); + } + } + } +} + +#[test] +fn the_built_in_arabic_face_draws_the_arabic_catalog() { + if !figcraft_text::CRAFT_FONTS.iter().any(|f| f.family == "Noto Sans Arabic" && f.style == "Regular") { + eprintln!("built without craft-fonts' Noto Sans Arabic; skipping"); + return; + } + let Some(face) = figcraft_text::face_with_char('ع', &["Noto Sans Arabic"]) else { + panic!("the supplied Noto Sans Arabic face must draw Arabic"); + }; + let ar = &LANGS[LANGS.iter().position(|l| l.code == "ar").unwrap()]; + let letters: BTreeSet = ar + .ui + .iter() + .chain(ar.commands) + .chain(ar.menu) + .flat_map(|(_, t)| forms(t)) + .flat_map(str::chars) + .filter(|c| matches!(u32::from(*c), 0x0600..=0x06FF)) + .collect(); + assert!(letters.len() > 28); + let missing: String = letters.iter().filter(|c| !face.has_char(**c)).collect(); + assert!(missing.is_empty(), "Arabic catalog glyphs missing from the embedded face: {missing:?}"); +} + /// Release builds embed craft-fonts' Noto Sans Georgian (`theme::install_fonts`' built-in faces), /// since Inter and egui's fonts have no Georgian: it draws every Georgian letter the catalog uses. #[test] diff --git a/docs/gaps.md b/docs/gaps.md index 9e079036..833405cd 100644 --- a/docs/gaps.md +++ b/docs/gaps.md @@ -1,6 +1,6 @@ # Where FigCraft falls short of Figma -> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-28 · **Change:** minor (gap 7: the browser refines a zoom's preview once the zoom has paused; gap 17: branches in live sessions, branch history entries, the list-merge rows brought up to date; gap 6: plugin widgets take text input and a property menu (plugin API 4); gap 24: board templates and tables; gap 24: a shared timer and voting sessions; gap 24: the board dot grid, connector ends dragged to re-attach, curved connectors; egui/eframe 0.37 verified for gap 18; known gaps from the #1311 review in gaps 4, 14, 15 and 16; gap 16: measurements kept on the canvas, a read-only layers panel in Dev Mode; gap 24: boards and their tail; Dev Mode tail: import lines in layer trees, compare with versions, an inspect-only canvas; gap 5: reviewed Turkish, Czech and Indonesian drafts, the Japanese draft completed; reviewed Russian catalog and integer plurals; `.fig` export: instance sizes, variables with modes, shared styles, variable-width strokes; sharing with a join code; text box sizes measured against documents re-saved by other software; live sessions per document; .fig export checked by opening written files in other software; experimental .fig export; keyboard shortcut parity suite and bindings; Simplified Chinese draft catalog; Latin American Spanish overlay; prototyping tail: gamepad triggers, widgets in prototypes, mode lookups; plugin directory on figcraft-server; Japanese and Korean draft catalogs and CJK UI fonts; plugin widgets and the plugin panel tail; French, German and Brazilian Portuguese draft catalogs; cursor chat and spotlight in live sessions; layers and assets panels behaviour suite and fixes; vector multi-edit and edit tail; dev resources links; extended collections tail; branch version history and finer list merges; comments and version history behaviour suite and fixes; canvas navigation, guides and grids behaviour suite and fixes; `.fig` import: editable vector networks, more layer kinds, variable prototype actions; `.fig` import, best effort: gap 1 down to its tail; Windows QA pass: everyday workflows on Windows 11, eight fixes incl. unsaved work kept after a crash or a forced quit; Display P3: gamut warning and soft-proof (true P3 blocked upstream); several windows; localization layer with a draft Spanish catalog; hosting figcraft-server: wss in the desktop app, server releases, deployment guide; plugin panels and settings; canvas fixes: boolean hit testing on the result, group drags, frame outlines and slices; code connect; stretch and scatter brushes, pen pressure; text on a path and pattern fills; team libraries on the server and swap library; branches: create, update from main, review and merge; animated GIF fills and TIFF images; Open recent, outlines for the selection and mask outlines: menu breadth 100%; extended collections, variables import/export, gradient stop and variant bindings: gap 14 down to its tail; the 2026-10-17 landings: `.fig` import fidelity, budgets for large files, the import report, a `.fig` copy from Save as and paste from another design app (gap 1); menus, the Actions palette, editor fixes, Selection colors and smart-selection spacing (gap 4); catalog counts re-measured (gap 5); bounded canvas pan overscan; reviewed Russian catalog and integer plurals; `.fig` export: instance sizes, variables with modes, shared styles, variable-width strokes; sharing with a join code; text box sizes measured against documents re-saved by other software; live sessions per document; .fig export checked by opening written files in other software; experimental .fig export; keyboard shortcut parity suite and bindings; Simplified Chinese draft catalog; Latin American Spanish overlay; prototyping tail: gamepad triggers, widgets in prototypes, mode lookups; plugin directory on figcraft-server; Japanese and Korean draft catalogs and CJK UI fonts; plugin widgets and the plugin panel tail; French, German and Brazilian Portuguese draft catalogs; cursor chat and spotlight in live sessions; layers and assets panels behaviour suite and fixes; vector multi-edit and edit tail; dev resources links; extended collections tail; branch version history and finer list merges; comments and version history behaviour suite and fixes; canvas navigation, guides and grids behaviour suite and fixes; `.fig` import: editable vector networks, more layer kinds, variable prototype actions; `.fig` import, best effort: gap 1 down to its tail; Windows QA pass: everyday workflows on Windows 11, eight fixes incl. unsaved work kept after a crash or a forced quit; Display P3: gamut warning and soft-proof (true P3 blocked upstream); several windows; localization layer with a draft Spanish catalog; hosting figcraft-server: wss in the desktop app, server releases, deployment guide; plugin panels and settings; canvas fixes: boolean hit testing on the result, group drags, frame outlines and slices; code connect; stretch and scatter brushes, pen pressure; text on a path and pattern fills; team libraries on the server and swap library; branches: create, update from main, review and merge; animated GIF fills and TIFF images; Open recent, outlines for the selection and mask outlines: menu breadth 100%; extended collections, variables import/export, gradient stop and variant bindings: gap 14 down to its tail) · **Target:** Figma Design (desktop app 126.10.7) +> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-28 · **Change:** minor (Arabic draft catalog; gap 7: the browser refines a zoom's preview once the zoom has paused; gap 17: branches in live sessions, branch history entries, the list-merge rows brought up to date; gap 6: plugin widgets take text input and a property menu (plugin API 4); gap 24: board templates and tables; gap 24: a shared timer and voting sessions; gap 24: the board dot grid, connector ends dragged to re-attach, curved connectors; egui/eframe 0.37 verified for gap 18; known gaps from the #1311 review in gaps 4, 14, 15 and 16; gap 16: measurements kept on the canvas, a read-only layers panel in Dev Mode; gap 24: boards and their tail; Dev Mode tail: import lines in layer trees, compare with versions, an inspect-only canvas; gap 5: reviewed Turkish, Czech and Indonesian drafts, the Japanese draft completed; reviewed Russian catalog and integer plurals; `.fig` export: instance sizes, variables with modes, shared styles, variable-width strokes; sharing with a join code; text box sizes measured against documents re-saved by other software; live sessions per document; .fig export checked by opening written files in other software; experimental .fig export; keyboard shortcut parity suite and bindings; Simplified Chinese draft catalog; Latin American Spanish overlay; prototyping tail: gamepad triggers, widgets in prototypes, mode lookups; plugin directory on figcraft-server; Japanese and Korean draft catalogs and CJK UI fonts; plugin widgets and the plugin panel tail; French, German and Brazilian Portuguese draft catalogs; cursor chat and spotlight in live sessions; layers and assets panels behaviour suite and fixes; vector multi-edit and edit tail; dev resources links; extended collections tail; branch version history and finer list merges; comments and version history behaviour suite and fixes; canvas navigation, guides and grids behaviour suite and fixes; `.fig` import: editable vector networks, more layer kinds, variable prototype actions; `.fig` import, best effort: gap 1 down to its tail; Windows QA pass: everyday workflows on Windows 11, eight fixes incl. unsaved work kept after a crash or a forced quit; Display P3: gamut warning and soft-proof (true P3 blocked upstream); several windows; localization layer with a draft Spanish catalog; hosting figcraft-server: wss in the desktop app, server releases, deployment guide; plugin panels and settings; canvas fixes: boolean hit testing on the result, group drags, frame outlines and slices; code connect; stretch and scatter brushes, pen pressure; text on a path and pattern fills; team libraries on the server and swap library; branches: create, update from main, review and merge; animated GIF fills and TIFF images; Open recent, outlines for the selection and mask outlines: menu breadth 100%; extended collections, variables import/export, gradient stop and variant bindings: gap 14 down to its tail; the 2026-10-17 landings: `.fig` import fidelity, budgets for large files, the import report, a `.fig` copy from Save as and paste from another design app (gap 1); menus, the Actions palette, editor fixes, Selection colors and smart-selection spacing (gap 4); catalog counts re-measured (gap 5); bounded canvas pan overscan; reviewed Russian catalog and integer plurals; `.fig` export: instance sizes, variables with modes, shared styles, variable-width strokes; sharing with a join code; text box sizes measured against documents re-saved by other software; live sessions per document; .fig export checked by opening written files in other software; experimental .fig export; keyboard shortcut parity suite and bindings; Simplified Chinese draft catalog; Latin American Spanish overlay; prototyping tail: gamepad triggers, widgets in prototypes, mode lookups; plugin directory on figcraft-server; Japanese and Korean draft catalogs and CJK UI fonts; plugin widgets and the plugin panel tail; French, German and Brazilian Portuguese draft catalogs; cursor chat and spotlight in live sessions; layers and assets panels behaviour suite and fixes; vector multi-edit and edit tail; dev resources links; extended collections tail; branch version history and finer list merges; comments and version history behaviour suite and fixes; canvas navigation, guides and grids behaviour suite and fixes; `.fig` import: editable vector networks, more layer kinds, variable prototype actions; `.fig` import, best effort: gap 1 down to its tail; Windows QA pass: everyday workflows on Windows 11, eight fixes incl. unsaved work kept after a crash or a forced quit; Display P3: gamut warning and soft-proof (true P3 blocked upstream); several windows; localization layer with a draft Spanish catalog; hosting figcraft-server: wss in the desktop app, server releases, deployment guide; plugin panels and settings; canvas fixes: boolean hit testing on the result, group drags, frame outlines and slices; code connect; stretch and scatter brushes, pen pressure; text on a path and pattern fills; team libraries on the server and swap library; branches: create, update from main, review and merge; animated GIF fills and TIFF images; Open recent, outlines for the selection and mask outlines: menu breadth 100%; extended collections, variables import/export, gradient stop and variant bindings: gap 14 down to its tail) · **Target:** Figma Design (desktop app 126.10.7) Every known shortfall against Figma, one entry each, ranked by how much it stops a Figma user from doing real work in FigCraft. Agents: pick work from the top unless the owner says otherwise. The @@ -18,7 +18,7 @@ No alpha blockers: the alpha gate in [`roadmap.md`](roadmap.md#alpha-gate) passe | 2 | Multiplayer and sharing are a preview, without accounts (**beta blocker**) | Feature | 42–84 | [collaboration-parity](collaboration-parity.md) | | 3 | Nothing checked against real Figma files | Fidelity | 15–30 | [target-app-parity](target-app-parity.md) | | 4 | Interaction fidelity not compared tool by tool | UI/UX | 40–60 | [ui-parity](ui-parity.md) | -| 5 | Localization: English, reviewed Russian and Turkish, plus unreviewed Spanish (and Latin American Spanish), French, German, Brazilian Portuguese, Japanese, Korean, Simplified Chinese, Indonesian and Czech drafts; Turkish and Swedish catalogs | Localization | 29–51 | [localization-parity](localization-parity.md) | +| 5 | Localization: English, reviewed Russian and Turkish, plus unreviewed Spanish (and Latin American Spanish), French, German, Brazilian Portuguese, Japanese, Korean, Simplified Chinese, Indonesian and Czech drafts; Turkish and Swedish catalogs; Arabic draft: 2,508 entries, native review and panel mirroring pending | Localization | 29–51 | [localization-parity](localization-parity.md) | | 6 | Plugins: widgets without hover or timers, a self-hosted directory but no public catalogue; Figma's plugins don't run | Ecosystem | 6–22 | [target-app-parity](target-app-parity.md) | | 7 | CPU canvas where Figma uses the GPU | Hardware/performance | 30–60 | [hardware-parity](hardware-parity.md) | | 8 | Platform QA: Linux and the browser left (Windows pass done 2026-10-11) | Stability/platforms | 10–20 | [hardware-parity](hardware-parity.md) | @@ -184,7 +184,7 @@ No alpha blockers: the alpha gate in [`roadmap.md`](roadmap.md#alpha-gate) passe ### 5. Localization: English, reviewed Russian and Turkish, plus unreviewed drafts - **Missing:** native reviews of the Spanish, French, German, Brazilian Portuguese, Japanese, Korean, Simplified Chinese, Indonesian and Czech drafts and the Latin American Spanish - overlay, the strings added since each catalog was drafted (1–5% of each), Hindi, Arabic and + overlay, the strings added since each catalog was drafted (1–5% of each), the Arabic draft's native review and panel mirroring, Hindi and Vietnamese, localized engine messages and number formatting; CJK UI text on the web without the craft-fonts CJK build. - **Evidence (measured from source):** the layer landed 2026-10-11: catalogs in @@ -524,6 +524,7 @@ No alpha blockers: the alpha gate in [`roadmap.md`](roadmap.md#alpha-gate) passe | Date | Change | Summary | |---|---|---| +| 2026-10-28 | minor | Arabic draft: 1,857 UI strings, 620 command labels, 31 menu wordings; count-neutral plurals and web font gate. Native review and panel mirroring remain open; grade and estimates unchanged. Evidence: `locales/ar.toml`, i18n catalog tests and [translation notes](translating.md#arabic-draft) | | 2026-10-28 | minor | Gap 7: the browser refines a zoom's preview only once the zoom has paused for 120 ms, so a wheel zoom no longer runs a blocking full render between every two steps. Numbers unchanged | | 2026-10-25 | minor | egui/eframe 0.37 verified for gap 18: the remaining limitations are unchanged. egui-wgpu 0.37 still picks an 8-bit sRGB surface with no colour-space option, so P3 colours outside sRGB still clip on screen; eframe 0.37 still gives only the main window an AccessKit adapter, so other windows have no screen-reader tree. Numbers unchanged | | 2026-10-25 | minor | Known gaps from the #1311 review: gap 4, the export preview follows a slice's first export setting; gap 14, the scopes a paint style's color takes are FigCraft's own rule; gap 15, `proto.linkNotice` from the palette or control channel isn't saved until the next preferences save; gap 16, the file name field still renames in Dev Mode (to check against Figma first). Ranking and hours unchanged | diff --git a/docs/localization-parity.md b/docs/localization-parity.md index f7fb2dde..d06ebd42 100644 --- a/docs/localization-parity.md +++ b/docs/localization-parity.md @@ -1,6 +1,6 @@ # Localization parity -> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-24 · **Change:** minor (Thai draft catalog and Thai UI fonts; a missing translation fails no check: `cargo xtask i18n-report` lists them; Vietnamese draft catalog; string counts re-measured: 2,352 entries; Russian and Turkish catalogs reviewed by native speakers, Russian one/few/many plurals; Czech and Indonesian drafts; the Japanese draft completed; counts re-measured; Windows UI language from the first preferred language; draft catalogs catch up: every draft translates every string again; Simplified Chinese draft catalog; macOS finds its downloadable CJK system fonts (#406); string counts re-measured: 2,272 entries, the drafts at 95–99%; Swedish command labels and menu wordings; Russian, Swedish, Turkish, Czech and Indonesian listed; a duplicated paragraph removed; draft catalogs catch up: every draft translates every string again; Simplified Chinese draft catalog) · **Target:** Figma Design (desktop app 126.10.7) +> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-28 · **Change:** minor (Arabic draft catalog, count-neutral plurals and web font gate; Thai draft catalog and Thai UI fonts; a missing translation fails no check: `cargo xtask i18n-report` lists them; Vietnamese draft catalog; string counts re-measured: 2,352 entries; Russian and Turkish catalogs reviewed by native speakers, Russian one/few/many plurals; Czech and Indonesian drafts; the Japanese draft completed; counts re-measured; Windows UI language from the first preferred language; draft catalogs catch up: every draft translates every string again; Simplified Chinese draft catalog; macOS finds its downloadable CJK system fonts (#406); string counts re-measured: 2,272 entries, the drafts at 95–99%; Swedish command labels and menu wordings; Russian, Swedish, Turkish, Czech and Indonesian listed; a duplicated paragraph removed; draft catalogs catch up: every draft translates every string again; Simplified Chinese draft catalog) · **Target:** Figma Design (desktop app 126.10.7) FigCraft's interface has a localization layer with an English catalog, a Russian catalog reviewed by a native speaker, and Spanish (with a Latin American overlay), French, German, Brazilian @@ -91,7 +91,7 @@ supported by both apps (CJK, Arabic and Devanagari shaping, IME); Figma has no v | Simplified Chinese (Mandarin) | zh-Hans | 2,216 / 2,352 (94.2%, draft) | yes | CJK text and IME in documents; UI text in an installed Chinese face, ahead of Japanese ones (web: the `FIGCRAFT_EMBED_CJK` build); no Traditional Chinese catalog (zh-TW, zh-HK read English) | no | draft | 1–2 (after native review) | | Spanish | es, es-419 | 2,352 / 2,352 (100%, draft); es-419 overlays 104 Latin American wordings (draft) | yes | Latin | no | draft | 0–1 (after native review) | | Hindi | hi | 0 (0%) | no | Devanagari shaping works in documents; UI font fallback to check | no | none | 4–7 | -| Arabic | ar | 0 (0%) | no | Bidi, shaping and RTL names work; the UI does not mirror | no | none | 9–15 | +| Arabic | ar | 1,857 / 1,857 UI strings, 620 command labels, 31 menu wordings (draft, counted 2026-10-28) | catalog complete; native review pending | Existing bidi/shaping and Arabic system fallback; web not offered (font budget excludes Arabic); panels do not mirror | no | draft | review + panel mirroring (not re-estimated) | | French | fr | 2,328 / 2,352 (99.0%, draft) | yes | Latin | no | draft | 1–2 (after native review) | | Portuguese | pt-BR | 2,331 / 2,352 (99.1%, draft) | yes | Latin | no | draft | 1–2 (after native review) | | Indonesian | id | 2,292 / 2,352 (97.4%, draft) | yes | Latin | no | draft | 1–2 (after native review) | @@ -123,6 +123,7 @@ Hindi and Arabic. Traditional Chinese is not planned (no catalog; its users see | Date | Change | Summary | |---|---|---| +| 2026-10-28 | minor | Arabic draft: 1,857 UI entries, 620 command labels and 31 menu wordings, with count-neutral plurals. AI-assisted, native review pending. Desktop uses the existing Arabic fallback and bidi; web requires an embedded Arabic face. No panel mirroring or parity-grade increase claimed | | 2026-10-24 | minor | Thai (`th`) draft catalog: `th.toml` translates every UI string (1,791), 589 command labels and the 31 menu wordings, machine-drafted and marked as a draft awaiting native review (9 newer command labels read English, as in the other drafts). The desktop UI now adds an installed Thai face (Noto Sans Thai, Leelawadee UI, Tahoma, Sukhumvit Set, Thonburi, Ayuthaya, Sarabun, Loma, Garuda or Waree) when a layer or page name or the UI language needs it, so Thai names no longer show as tofu squares. No plural forms for Thai. Grade and hours unchanged | | 2026-10-24 | minor | Vietnamese (`vi`) draft catalog (#1026), assessed as a machine draft awaiting review like the others; string counts re-measured: 2,352 entries. | | 2026-10-23 | minor | A missing translation fails no check: Spanish is no longer held to full coverage, and the tests of one language's wording, names and plural forms are gone (the plural rules and language-tag tests stay). `cargo xtask i18n-report`, run by `cargo xtask ci`, lists each language's missing UI strings, command labels and menu wordings. Grade unchanged | diff --git a/docs/roadmap.md b/docs/roadmap.md index 14d734ba..2ab450dc 100644 --- a/docs/roadmap.md +++ b/docs/roadmap.md @@ -1,6 +1,6 @@ # FigCraft roadmap: milestones and what's next -> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-26 · **Change:** minor (Android Vector Drawable export; a selected unfilled shape drags over a filled layer below it (#1370); text truncation fills the last line, survives resizing, and auto height takes Max lines (#1375, #1376, #1377); M11 widget fields and property menus; M12 Boards: timer and voting; Installed weights of an embedded font family (#1246); `.sketch` import, best effort; Adobe Fonts found on macOS (#298); M12 Boards; community fixes in #507, #510, #529 and #530: auto-save, a text box by dragging, batch step references, removing someone from a live session, Russian and Turkish catalogs reviewed, Czech and Indonesian drafts, the Japanese draft completed, zoom previews, the web clipboard, Alt-drag snapping and Cmd+D repeat, recovery copies, crash and rollback fixes, colour emoji, `.fig` import fixes; earlier changes are in the revision history below) · **Target:** Figma Design (desktop app 126.10.7) +> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-28 · **Change:** minor (Arabic draft catalog; Android Vector Drawable export; a selected unfilled shape drags over a filled layer below it (#1370); text truncation fills the last line, survives resizing, and auto height takes Max lines (#1375, #1376, #1377); M11 widget fields and property menus; M12 Boards: timer and voting; Installed weights of an embedded font family (#1246); `.sketch` import, best effort; Adobe Fonts found on macOS (#298); M12 Boards; community fixes in #507, #510, #529 and #530: auto-save, a text box by dragging, batch step references, removing someone from a live session, Russian and Turkish catalogs reviewed, Czech and Indonesian drafts, the Japanese draft completed, zoom previews, the web clipboard, Alt-drag snapping and Cmd+D repeat, recovery copies, crash and rollback fixes, colour emoji, `.fig` import fixes; earlier changes are in the revision history below) · **Target:** Figma Design (desktop app 126.10.7) Forward-looking plan. Where FigCraft stands today: [`ROADMAP.md`](../ROADMAP.md) and [`target-app-parity.md`](target-app-parity.md); the full ranked list: [`gaps.md`](gaps.md). Hours @@ -18,7 +18,7 @@ are one Opus 5.5 agent; most milestones split across 4–6 agents on disjoint cr 4. **Languages** on the landed localization layer: native reviews of the es, fr, de, pt-BR, ja, ko, zh-Hans, id and cs drafts and the es-419 overlay (people; Russian and Turkish are reviewed), the entries added since each catalog was written, then the other key languages (Hindi, - Vietnamese, Arabic): 3–7 h per language plus native review. + Vietnamese): 3–7 h per language plus native review. Arabic now has a complete draft; native review and panel mirroring remain. 5. **Multiplayer M9**: accounts and teams on top of the live sessions and the standalone server (the WebSocket transport, hosting from the app, invite links that open the app, document sync, live cursors, selections, text carets, avatars and follow, per-user undo, reconnect with offline edits, collision-free ids for styles, variables, collections and comments, joining from the browser, and `figcraft-server` with persistence, publishing from the app and share links to edit or view landed), per [`collab-protocol.md`](collab-protocol.md) and [`server.md`](server.md): 45–90 h. ## Alpha gate @@ -58,7 +58,7 @@ blockers. | M7 Release & fidelity (signed builds, look & feel, shortcuts) | builds done; fidelity pass started | tool-by-tool pass | 40–60 | | M8 Hardening & performance (bench, retained canvas, accessibility, idle) | ~60% | real-file corpus, platform QA, GPU canvas, screen readers | 60–110 | | M9 Real-time collaboration | core done (#103: ids, change sets, server ordering, convergence); live sessions (WebSocket transport with limits and reconnect, hosting from the app, invite links, document sync between apps, cursors, selections, avatars, follow, `collab.*` commands); per-user undo, rejection handling, offline queue and resuming after a reconnect; styles, variables, collections, modes and comments created in a session get ids from their creator's space; others' text carets and selections on the canvas; the browser client (joins desktop-hosted sessions); `figcraft://` links open the app and join (Windows registers per user; macOS and Linux packages declare the scheme); the standalone `figcraft-server` (persistence with compaction, restarts that lose nothing confirmed, publishing from the app, share links to edit or view, revocable); team libraries kept on the server and enabled by a share link, with usage counts, and swapping a library; `wss://` from the desktop app, server releases and a deployment guide | accounts, teams | 45–90 | -| M10 Localization | ~39%: the layer, English, Russian and Turkish reviewed by native speakers; Spanish (with a Latin American overlay), French, German, Brazilian Portuguese, Japanese, Korean, Simplified Chinese, Indonesian and Czech drafts | native reviews, Hindi, Vietnamese, Arabic (with mirrored panels), engine messages and number formatting ([localization-parity](localization-parity.md)) | 29–51 | +| M10 Localization | ~39%: the layer, English, Russian and Turkish reviewed by native speakers; Spanish (with a Latin American overlay), French, German, Brazilian Portuguese, Japanese, Korean, Simplified Chinese, Indonesian and Czech drafts; Arabic draft: 2,508 entries, native review and panel mirroring pending | native reviews (including the Arabic draft), Hindi, Vietnamese, Arabic panel mirroring, engine messages and number formatting ([localization-parity](localization-parity.md)) | 29–51 | | M11 Plugins | runtime, API, menu, manager and SDK done (#101); plugin panels and settings (ABI v2); widgets (API 3), panels side by side, colour picker on plugin fields; a plugin directory on `figcraft-server` (publish, browse, install, update); widget fields and property menus (API 4) | a public catalogue, publisher accounts and signatures, the directory in the browser, widget hover and timers; Figma plugin compatibility is an owner decision | 6–22 | | M12 Boards (new) | first slice landed (2026-10-24): board files, sticky notes, shapes with text, connectors that follow, marker, highlighter, eraser, stamps, board toolbar and contextual bar, live sessions; then a shared timer and voting sessions | widgets, templates, tables, mind maps ([boards-parity](boards-parity.md)) | 20–44 | | M13 AI features (new, owner decision) | not started | local models | 30–60 | @@ -75,6 +75,7 @@ blockers. | Date | Change | Summary | |---|---|---| +| 2026-10-28 | minor | Arabic draft: 1,857 UI strings, 620 command labels, 31 menu wordings; count-neutral plurals and web font gate. Native review and panel mirroring remain open; grade and estimates unchanged. Evidence: `crates/ui-egui/locales/ar.toml`, i18n catalog tests and [translation notes](translating.md#arabic-draft) | | 2026-10-26 | minor | Dragging a selected unfilled shape (M1, #1370): a press inside a selected stroke-only shape over a filled layer stacked below it moved that layer; the drag-from-inside fallback of #910 now treats any layer painted below the selection like the frame or canvas behind it, so the selection drags, while a layer painted above it still takes the press. Regression test in the selection behaviour suite. Numbers unchanged | | 2026-10-26 | minor | Text truncation (M4, #1375, #1376, #1377): the last line shown takes as much of the next word as fits before the ellipsis ("Lorem consec…", not "Lorem…"); an explicit height, `transform.resize`, a resize handle or fixed sizing on a truncated text keeps it truncating instead of turning it fixed size; Max lines on auto-height text hugs up to that many lines and ends in an ellipsis (`text.maxLines`, `node.set {maxLines}`, Type settings, `.fig` export and import), and `node.get` / `get_node` report `maxLines`. Regression tests in the text and engine behaviour suites. Numbers unchanged | | 2026-10-24 | minor | Installed weights of an embedded font family (M7, #1246): release builds embed some families with only a few styles (Poppins Regular, Italic and Bold), and the first font scan dropped every installed face of such a family, so an installed Poppins SemiBold or Medium was never offered (a rescan did offer them). The first scan now keeps the embedded faces, which still win for the styles they cover, and offers the installed styles they lack beside them. Regression test in the font database tests. Numbers unchanged | diff --git a/docs/target-app-parity.md b/docs/target-app-parity.md index 9c96d657..af74182e 100644 --- a/docs/target-app-parity.md +++ b/docs/target-app-parity.md @@ -1,6 +1,6 @@ # FigCraft parity with Figma -> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-26 · **Change:** minor (truncated text fills its last line before the ellipsis and keeps truncating when resized; auto-height text with max lines (#1375, #1376, #1377), numbers unchanged; plugin widgets take text input and a property menu (plugin API 4); boards: templates and tables; boards: a shared timer and voting sessions; boards: the dot grid, connector ends dragged to re-attach, curved connectors; `.sketch` import, best effort: import/export breadth 86% → 87%, file formats 60% → 61%, headline numbers unchanged; Canvas & navigation's remaining work no longer lists outline mode's Include hidden layers and Include object bounds; boards: area 22 (weight 0, outside the weighted sum; CJK line breaking: JIS X 4051's line-start and line-end sets completed with the halfwidth small kana, the halfwidth and spacing (semi-)voiced sound marks, iteration marks 〱–〵 and the halfwidth parentheses; Turkish reviewed, Czech and Indonesian drafts, the Japanese draft completed; reviewed Russian catalog and integer plurals; vector edit mode regions: hover hatch, selection and drag; plugin log byte/count limits (#191); core editor leftovers: component playground, auto gap handles, variables inside styles, inner shadows and background blur on groups, command-made text readable on dark pages, a one-step frame/group convert, delays on mouse triggers and manual overlay offsets, wrapped-line alignment; starter templates, a Templates tab and Getting started tips on the home screen: essentials ~57% → ~59%; everyday editing partials: number fields, outline options, Hide when publishing, cursors, panel widths, dark pages, numbers unchanged but menu breadth 211/211; text box sizes measured against documents re-saved by other software: whole-pixel line heights, advances on a 1024-per-em grid, letter spacing between glyphs only, numbers unchanged; .fig export checked by opening written files in other software, numbers unchanged; a public figcraft-server: open hosting, owner tokens, per-address limits, idle expiry, moderation, install.sh; experimental .fig export; keyboard shortcut parity suite and bindings; Simplified Chinese draft catalog; Latin American Spanish overlay; prototyping tail: gamepad triggers, widgets in prototypes, mode lookups; plugin directory on figcraft-server; Japanese and Korean draft catalogs and CJK UI fonts; plugin widgets and the plugin panel tail; French, German and Brazilian Portuguese draft catalogs; cursor chat and spotlight in live sessions; layers and assets panels behaviour suite and fixes; vector multi-edit and edit tail; dev resources links; extended collections tail; branch version history and finer list merges; headline percentages recomputed from the area table: feature breadth ~84%, core ~94%, mainstream ~50%; text lists, hanging punctuation and decoration styles; comments and version history behaviour suite and fixes; canvas navigation, guides and grids behaviour suite and fixes; export and inspect behaviour suite and fixes; .fig import: editable vector networks and more layer kinds; shapes and vector behaviour suite and fixes; paint and effects behaviour suite and fixes; frames, groups, sections and masks behaviour suite and fixes; styles and variables behaviour suite and fixes; prototyping behaviour suite and fixes; components behaviour suite and fixes; embedded image colour profiles; layers panel keyboard: F2 rename, Shift+F10 context menu, keyboard box selection, 10k-layer QA; per-side stroke weight variables; text behaviour suite: CJK line breaking, metrics, vertical trim; selection and transform behaviour suite and fixes; `.fig` import, best effort; auto layout behaviour suite and fixes; Display P3: gamut warning and soft-proof (true P3 blocked upstream); several windows; localization layer with a draft Spanish catalog; hosting figcraft-server: wss in the desktop app, server releases, deployment guide; plugin panels and settings; canvas fixes: boolean hit testing on the result, group drags, frame outlines and slices; code connect; stretch and scatter brushes, pen pressure; text on a path and pattern fills; team libraries on the server and swap library; branches: create, update from main, review and merge; animated GIF fills and TIFF images; Open recent, outlines for the selection and mask outlines: menu breadth 100%; extended collections, variables import/export, gradient stop and variant bindings; feature breadth ~80%; ready ~49%; last major: full re-measure against Figma desktop 126.10.7; rows for the community batches: Selection colors, smart-selection spacing and a Present tab (#753), `.fig` import fidelity, paste from another design app, a `.fig` copy from Save as; control requests while the window is minimised (#720); catalog counts re-measured; automation roots (#715); number variables in the text content picker (#629); frames and sections convert into each other (#719); reviewed Russian catalog and integer plurals; vector edit mode regions: hover hatch, selection and drag; plugin log byte/count limits (#191); core editor leftovers: component playground, auto gap handles, variables inside styles, inner shadows and background blur on groups, command-made text readable on dark pages, a one-step frame/group convert, delays on mouse triggers and manual overlay offsets, wrapped-line alignment; starter templates, a Templates tab and Getting started tips on the home screen: essentials ~57% → ~59%; everyday editing partials: number fields, outline options, Hide when publishing, cursors, panel widths, dark pages, numbers unchanged but menu breadth 211/211; text box sizes measured against documents re-saved by other software: whole-pixel line heights, advances on a 1024-per-em grid, letter spacing between glyphs only, numbers unchanged; .fig export checked by opening written files in other software, numbers unchanged; a public figcraft-server: open hosting, owner tokens, per-address limits, idle expiry, moderation, install.sh; experimental .fig export; keyboard shortcut parity suite and bindings; Simplified Chinese draft catalog; Latin American Spanish overlay; prototyping tail: gamepad triggers, widgets in prototypes, mode lookups; plugin directory on figcraft-server; Japanese and Korean draft catalogs and CJK UI fonts; plugin widgets and the plugin panel tail; French, German and Brazilian Portuguese draft catalogs; cursor chat and spotlight in live sessions; layers and assets panels behaviour suite and fixes; vector multi-edit and edit tail; dev resources links; extended collections tail; branch version history and finer list merges; headline percentages recomputed from the area table: feature breadth ~84%, core ~94%, mainstream ~50%; text lists, hanging punctuation and decoration styles; comments and version history behaviour suite and fixes; canvas navigation, guides and grids behaviour suite and fixes; export and inspect behaviour suite and fixes; .fig import: editable vector networks and more layer kinds; shapes and vector behaviour suite and fixes; paint and effects behaviour suite and fixes; frames, groups, sections and masks behaviour suite and fixes; styles and variables behaviour suite and fixes; prototyping behaviour suite and fixes; components behaviour suite and fixes; embedded image colour profiles; layers panel keyboard: F2 rename, Shift+F10 context menu, keyboard box selection, 10k-layer QA; per-side stroke weight variables; text behaviour suite: CJK line breaking, metrics, vertical trim; selection and transform behaviour suite and fixes; `.fig` import, best effort; auto layout behaviour suite and fixes; Display P3: gamut warning and soft-proof (true P3 blocked upstream); several windows; localization layer with a draft Spanish catalog; hosting figcraft-server: wss in the desktop app, server releases, deployment guide; plugin panels and settings; canvas fixes: boolean hit testing on the result, group drags, frame outlines and slices; code connect; stretch and scatter brushes, pen pressure; text on a path and pattern fills; team libraries on the server and swap library; branches: create, update from main, review and merge; animated GIF fills and TIFF images; Open recent, outlines for the selection and mask outlines: menu breadth 100%; extended collections, variables import/export, gradient stop and variant bindings; feature breadth ~80%; ready ~49%; last major: full re-measure against Figma desktop 126.10.7; Canvas & navigation's remaining work no longer lists outline mode's Include hidden layers and Include object bounds; boards: area 22 (weight 0, outside the weighted sum; Turkish reviewed, Czech and Indonesian drafts, the Japanese draft completed; reviewed Russian catalog and integer plurals; vector edit mode regions: hover hatch, selection and drag; plugin log byte/count limits (#191); core editor leftovers: component playground, auto gap handles, variables inside styles, inner shadows and background blur on groups, command-made text readable on dark pages, a one-step frame/group convert, delays on mouse triggers and manual overlay offsets, wrapped-line alignment; starter templates, a Templates tab and Getting started tips on the home screen: essentials ~57% → ~59%; everyday editing partials: number fields, outline options, Hide when publishing, cursors, panel widths, dark pages, numbers unchanged but menu breadth 211/211; text box sizes measured against documents re-saved by other software: whole-pixel line heights, advances on a 1024-per-em grid, letter spacing between glyphs only, numbers unchanged; .fig export checked by opening written files in other software, numbers unchanged; a public figcraft-server: open hosting, owner tokens, per-address limits, idle expiry, moderation, install.sh; experimental .fig export; keyboard shortcut parity suite and bindings; Simplified Chinese draft catalog; Latin American Spanish overlay; prototyping tail: gamepad triggers, widgets in prototypes, mode lookups; plugin directory on figcraft-server; Japanese and Korean draft catalogs and CJK UI fonts; plugin widgets and the plugin panel tail; French, German and Brazilian Portuguese draft catalogs; cursor chat and spotlight in live sessions; layers and assets panels behaviour suite and fixes; vector multi-edit and edit tail; dev resources links; extended collections tail; branch version history and finer list merges; headline percentages recomputed from the area table: feature breadth ~84%, core ~94%, mainstream ~50%; text lists, hanging punctuation and decoration styles; comments and version history behaviour suite and fixes; canvas navigation, guides and grids behaviour suite and fixes; export and inspect behaviour suite and fixes; .fig import: editable vector networks and more layer kinds; shapes and vector behaviour suite and fixes; paint and effects behaviour suite and fixes; frames, groups, sections and masks behaviour suite and fixes; styles and variables behaviour suite and fixes; prototyping behaviour suite and fixes; components behaviour suite and fixes; embedded image colour profiles; layers panel keyboard: F2 rename, Shift+F10 context menu, keyboard box selection, 10k-layer QA; per-side stroke weight variables; text behaviour suite: CJK line breaking, metrics, vertical trim; selection and transform behaviour suite and fixes; `.fig` import, best effort; auto layout behaviour suite and fixes; Display P3: gamut warning and soft-proof (true P3 blocked upstream); several windows; localization layer with a draft Spanish catalog; hosting figcraft-server: wss in the desktop app, server releases, deployment guide; plugin panels and settings; canvas fixes: boolean hit testing on the result, group drags, frame outlines and slices; code connect; stretch and scatter brushes, pen pressure; text on a path and pattern fills; team libraries on the server and swap library; branches: create, update from main, review and merge; animated GIF fills and TIFF images; Open recent, outlines for the selection and mask outlines: menu breadth 100%; extended collections, variables import/export, gradient stop and variant bindings; feature breadth ~80%; ready ~49%; last major: full re-measure against Figma desktop 126.10.7; rows for the community batches: Selection colors, smart-selection spacing and a Present tab (#753), `.fig` import fidelity, paste from another design app, a `.fig` copy from Save as; control requests while the window is minimised (#720); catalog counts re-measured; automation roots (#715); number variables in the text content picker (#629); frames and sections convert into each other (#719); reviewed Russian catalog and integer plurals; vector edit mode regions: hover hatch, selection and drag; plugin log byte/count limits (#191); core editor leftovers: component playground, auto gap handles, variables inside styles, inner shadows and background blur on groups, command-made text readable on dark pages, a one-step frame/group convert, delays on mouse triggers and manual overlay offsets, wrapped-line alignment; starter templates, a Templates tab and Getting started tips on the home screen: essentials ~57% → ~59%; everyday editing partials: number fields, outline options, Hide when publishing, cursors, panel widths, dark pages, numbers unchanged but menu breadth 211/211; text box sizes measured against documents re-saved by other software: whole-pixel line heights, advances on a 1024-per-em grid, letter spacing between glyphs only, numbers unchanged; .fig export checked by opening written files in other software, numbers unchanged; a public figcraft-server: open hosting, owner tokens, per-address limits, idle expiry, moderation, install.sh; experimental .fig export; keyboard shortcut parity suite and bindings; Simplified Chinese draft catalog; Latin American Spanish overlay; prototyping tail: gamepad triggers, widgets in prototypes, mode lookups; plugin directory on figcraft-server; Japanese and Korean draft catalogs and CJK UI fonts; plugin widgets and the plugin panel tail; French, German and Brazilian Portuguese draft catalogs; cursor chat and spotlight in live sessions; layers and assets panels behaviour suite and fixes; vector multi-edit and edit tail; dev resources links; extended collections tail; branch version history and finer list merges; headline percentages recomputed from the area table: feature breadth ~84%, core ~94%, mainstream ~50%; text lists, hanging punctuation and decoration styles; comments and version history behaviour suite and fixes; canvas navigation, guides and grids behaviour suite and fixes; export and inspect behaviour suite and fixes; .fig import: editable vector networks and more layer kinds; shapes and vector behaviour suite and fixes; paint and effects behaviour suite and fixes; frames, groups, sections and masks behaviour suite and fixes; styles and variables behaviour suite and fixes; prototyping behaviour suite and fixes; components behaviour suite and fixes; embedded image colour profiles; layers panel keyboard: F2 rename, Shift+F10 context menu, keyboard box selection, 10k-layer QA; per-side stroke weight variables; text behaviour suite: CJK line breaking, metrics, vertical trim; selection and transform behaviour suite and fixes; `.fig` import, best effort; auto layout behaviour suite and fixes; Display P3: gamut warning and soft-proof (true P3 blocked upstream); several windows; localization layer with a draft Spanish catalog; hosting figcraft-server: wss in the desktop app, server releases, deployment guide; plugin panels and settings; canvas fixes: boolean hit testing on the result, group drags, frame outlines and slices; code connect; stretch and scatter brushes, pen pressure; text on a path and pattern fills; team libraries on the server and swap library; branches: create, update from main, review and merge; animated GIF fills and TIFF images; Open recent, outlines for the selection and mask outlines: menu breadth 100%; extended collections, variables import/export, gradient stop and variant bindings; feature breadth ~80%; ready ~49%; last major: full re-measure against Figma desktop 126.10.7) · **Target:** Figma Design (desktop app 126.10.7, macOS) +> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-28 · **Change:** minor (Arabic draft catalog; truncated text fills its last line before the ellipsis and keeps truncating when resized; auto-height text with max lines (#1375, #1376, #1377), numbers unchanged; plugin widgets take text input and a property menu (plugin API 4); boards: templates and tables; boards: a shared timer and voting sessions; boards: the dot grid, connector ends dragged to re-attach, curved connectors; `.sketch` import, best effort: import/export breadth 86% → 87%, file formats 60% → 61%, headline numbers unchanged; Canvas & navigation's remaining work no longer lists outline mode's Include hidden layers and Include object bounds; boards: area 22 (weight 0, outside the weighted sum; CJK line breaking: JIS X 4051's line-start and line-end sets completed with the halfwidth small kana, the halfwidth and spacing (semi-)voiced sound marks, iteration marks 〱–〵 and the halfwidth parentheses; Turkish reviewed, Czech and Indonesian drafts, the Japanese draft completed; reviewed Russian catalog and integer plurals; vector edit mode regions: hover hatch, selection and drag; plugin log byte/count limits (#191); core editor leftovers: component playground, auto gap handles, variables inside styles, inner shadows and background blur on groups, command-made text readable on dark pages, a one-step frame/group convert, delays on mouse triggers and manual overlay offsets, wrapped-line alignment; starter templates, a Templates tab and Getting started tips on the home screen: essentials ~57% → ~59%; everyday editing partials: number fields, outline options, Hide when publishing, cursors, panel widths, dark pages, numbers unchanged but menu breadth 211/211; text box sizes measured against documents re-saved by other software: whole-pixel line heights, advances on a 1024-per-em grid, letter spacing between glyphs only, numbers unchanged; .fig export checked by opening written files in other software, numbers unchanged; a public figcraft-server: open hosting, owner tokens, per-address limits, idle expiry, moderation, install.sh; experimental .fig export; keyboard shortcut parity suite and bindings; Simplified Chinese draft catalog; Latin American Spanish overlay; prototyping tail: gamepad triggers, widgets in prototypes, mode lookups; plugin directory on figcraft-server; Japanese and Korean draft catalogs and CJK UI fonts; plugin widgets and the plugin panel tail; French, German and Brazilian Portuguese draft catalogs; cursor chat and spotlight in live sessions; layers and assets panels behaviour suite and fixes; vector multi-edit and edit tail; dev resources links; extended collections tail; branch version history and finer list merges; headline percentages recomputed from the area table: feature breadth ~84%, core ~94%, mainstream ~50%; text lists, hanging punctuation and decoration styles; comments and version history behaviour suite and fixes; canvas navigation, guides and grids behaviour suite and fixes; export and inspect behaviour suite and fixes; .fig import: editable vector networks and more layer kinds; shapes and vector behaviour suite and fixes; paint and effects behaviour suite and fixes; frames, groups, sections and masks behaviour suite and fixes; styles and variables behaviour suite and fixes; prototyping behaviour suite and fixes; components behaviour suite and fixes; embedded image colour profiles; layers panel keyboard: F2 rename, Shift+F10 context menu, keyboard box selection, 10k-layer QA; per-side stroke weight variables; text behaviour suite: CJK line breaking, metrics, vertical trim; selection and transform behaviour suite and fixes; `.fig` import, best effort; auto layout behaviour suite and fixes; Display P3: gamut warning and soft-proof (true P3 blocked upstream); several windows; localization layer with a draft Spanish catalog; hosting figcraft-server: wss in the desktop app, server releases, deployment guide; plugin panels and settings; canvas fixes: boolean hit testing on the result, group drags, frame outlines and slices; code connect; stretch and scatter brushes, pen pressure; text on a path and pattern fills; team libraries on the server and swap library; branches: create, update from main, review and merge; animated GIF fills and TIFF images; Open recent, outlines for the selection and mask outlines: menu breadth 100%; extended collections, variables import/export, gradient stop and variant bindings; feature breadth ~80%; ready ~49%; last major: full re-measure against Figma desktop 126.10.7; rows for the community batches: Selection colors, smart-selection spacing and a Present tab (#753), `.fig` import fidelity, paste from another design app, a `.fig` copy from Save as; control requests while the window is minimised (#720); catalog counts re-measured; automation roots (#715); number variables in the text content picker (#629); frames and sections convert into each other (#719); reviewed Russian catalog and integer plurals; vector edit mode regions: hover hatch, selection and drag; plugin log byte/count limits (#191); core editor leftovers: component playground, auto gap handles, variables inside styles, inner shadows and background blur on groups, command-made text readable on dark pages, a one-step frame/group convert, delays on mouse triggers and manual overlay offsets, wrapped-line alignment; starter templates, a Templates tab and Getting started tips on the home screen: essentials ~57% → ~59%; everyday editing partials: number fields, outline options, Hide when publishing, cursors, panel widths, dark pages, numbers unchanged but menu breadth 211/211; text box sizes measured against documents re-saved by other software: whole-pixel line heights, advances on a 1024-per-em grid, letter spacing between glyphs only, numbers unchanged; .fig export checked by opening written files in other software, numbers unchanged; a public figcraft-server: open hosting, owner tokens, per-address limits, idle expiry, moderation, install.sh; experimental .fig export; keyboard shortcut parity suite and bindings; Simplified Chinese draft catalog; Latin American Spanish overlay; prototyping tail: gamepad triggers, widgets in prototypes, mode lookups; plugin directory on figcraft-server; Japanese and Korean draft catalogs and CJK UI fonts; plugin widgets and the plugin panel tail; French, German and Brazilian Portuguese draft catalogs; cursor chat and spotlight in live sessions; layers and assets panels behaviour suite and fixes; vector multi-edit and edit tail; dev resources links; extended collections tail; branch version history and finer list merges; headline percentages recomputed from the area table: feature breadth ~84%, core ~94%, mainstream ~50%; text lists, hanging punctuation and decoration styles; comments and version history behaviour suite and fixes; canvas navigation, guides and grids behaviour suite and fixes; export and inspect behaviour suite and fixes; .fig import: editable vector networks and more layer kinds; shapes and vector behaviour suite and fixes; paint and effects behaviour suite and fixes; frames, groups, sections and masks behaviour suite and fixes; styles and variables behaviour suite and fixes; prototyping behaviour suite and fixes; components behaviour suite and fixes; embedded image colour profiles; layers panel keyboard: F2 rename, Shift+F10 context menu, keyboard box selection, 10k-layer QA; per-side stroke weight variables; text behaviour suite: CJK line breaking, metrics, vertical trim; selection and transform behaviour suite and fixes; `.fig` import, best effort; auto layout behaviour suite and fixes; Display P3: gamut warning and soft-proof (true P3 blocked upstream); several windows; localization layer with a draft Spanish catalog; hosting figcraft-server: wss in the desktop app, server releases, deployment guide; plugin panels and settings; canvas fixes: boolean hit testing on the result, group drags, frame outlines and slices; code connect; stretch and scatter brushes, pen pressure; text on a path and pattern fills; team libraries on the server and swap library; branches: create, update from main, review and merge; animated GIF fills and TIFF images; Open recent, outlines for the selection and mask outlines: menu breadth 100%; extended collections, variables import/export, gradient stop and variant bindings; feature breadth ~80%; ready ~49%; last major: full re-measure against Figma desktop 126.10.7; Canvas & navigation's remaining work no longer lists outline mode's Include hidden layers and Include object bounds; boards: area 22 (weight 0, outside the weighted sum; Turkish reviewed, Czech and Indonesian drafts, the Japanese draft completed; reviewed Russian catalog and integer plurals; vector edit mode regions: hover hatch, selection and drag; plugin log byte/count limits (#191); core editor leftovers: component playground, auto gap handles, variables inside styles, inner shadows and background blur on groups, command-made text readable on dark pages, a one-step frame/group convert, delays on mouse triggers and manual overlay offsets, wrapped-line alignment; starter templates, a Templates tab and Getting started tips on the home screen: essentials ~57% → ~59%; everyday editing partials: number fields, outline options, Hide when publishing, cursors, panel widths, dark pages, numbers unchanged but menu breadth 211/211; text box sizes measured against documents re-saved by other software: whole-pixel line heights, advances on a 1024-per-em grid, letter spacing between glyphs only, numbers unchanged; .fig export checked by opening written files in other software, numbers unchanged; a public figcraft-server: open hosting, owner tokens, per-address limits, idle expiry, moderation, install.sh; experimental .fig export; keyboard shortcut parity suite and bindings; Simplified Chinese draft catalog; Latin American Spanish overlay; prototyping tail: gamepad triggers, widgets in prototypes, mode lookups; plugin directory on figcraft-server; Japanese and Korean draft catalogs and CJK UI fonts; plugin widgets and the plugin panel tail; French, German and Brazilian Portuguese draft catalogs; cursor chat and spotlight in live sessions; layers and assets panels behaviour suite and fixes; vector multi-edit and edit tail; dev resources links; extended collections tail; branch version history and finer list merges; headline percentages recomputed from the area table: feature breadth ~84%, core ~94%, mainstream ~50%; text lists, hanging punctuation and decoration styles; comments and version history behaviour suite and fixes; canvas navigation, guides and grids behaviour suite and fixes; export and inspect behaviour suite and fixes; .fig import: editable vector networks and more layer kinds; shapes and vector behaviour suite and fixes; paint and effects behaviour suite and fixes; frames, groups, sections and masks behaviour suite and fixes; styles and variables behaviour suite and fixes; prototyping behaviour suite and fixes; components behaviour suite and fixes; embedded image colour profiles; layers panel keyboard: F2 rename, Shift+F10 context menu, keyboard box selection, 10k-layer QA; per-side stroke weight variables; text behaviour suite: CJK line breaking, metrics, vertical trim; selection and transform behaviour suite and fixes; `.fig` import, best effort; auto layout behaviour suite and fixes; Display P3: gamut warning and soft-proof (true P3 blocked upstream); several windows; localization layer with a draft Spanish catalog; hosting figcraft-server: wss in the desktop app, server releases, deployment guide; plugin panels and settings; canvas fixes: boolean hit testing on the result, group drags, frame outlines and slices; code connect; stretch and scatter brushes, pen pressure; text on a path and pattern fills; team libraries on the server and swap library; branches: create, update from main, review and merge; animated GIF fills and TIFF images; Open recent, outlines for the selection and mask outlines: menu breadth 100%; extended collections, variables import/export, gradient stop and variant bindings; feature breadth ~80%; ready ~49%; last major: full re-measure against Figma desktop 126.10.7; rows for the community batches: Selection colors, smart-selection spacing and a Present tab (#753), `.fig` import fidelity, paste from another design app, a `.fig` copy from Save as; control requests while the window is minimised (#720); catalog counts re-measured; automation roots (#715); number variables in the text content picker (#629); frames and sections convert into each other (#719); reviewed Russian catalog and integer plurals; vector edit mode regions: hover hatch, selection and drag; plugin log byte/count limits (#191); core editor leftovers: component playground, auto gap handles, variables inside styles, inner shadows and background blur on groups, command-made text readable on dark pages, a one-step frame/group convert, delays on mouse triggers and manual overlay offsets, wrapped-line alignment; starter templates, a Templates tab and Getting started tips on the home screen: essentials ~57% → ~59%; everyday editing partials: number fields, outline options, Hide when publishing, cursors, panel widths, dark pages, numbers unchanged but menu breadth 211/211; text box sizes measured against documents re-saved by other software: whole-pixel line heights, advances on a 1024-per-em grid, letter spacing between glyphs only, numbers unchanged; .fig export checked by opening written files in other software, numbers unchanged; a public figcraft-server: open hosting, owner tokens, per-address limits, idle expiry, moderation, install.sh; experimental .fig export; keyboard shortcut parity suite and bindings; Simplified Chinese draft catalog; Latin American Spanish overlay; prototyping tail: gamepad triggers, widgets in prototypes, mode lookups; plugin directory on figcraft-server; Japanese and Korean draft catalogs and CJK UI fonts; plugin widgets and the plugin panel tail; French, German and Brazilian Portuguese draft catalogs; cursor chat and spotlight in live sessions; layers and assets panels behaviour suite and fixes; vector multi-edit and edit tail; dev resources links; extended collections tail; branch version history and finer list merges; headline percentages recomputed from the area table: feature breadth ~84%, core ~94%, mainstream ~50%; text lists, hanging punctuation and decoration styles; comments and version history behaviour suite and fixes; canvas navigation, guides and grids behaviour suite and fixes; export and inspect behaviour suite and fixes; .fig import: editable vector networks and more layer kinds; shapes and vector behaviour suite and fixes; paint and effects behaviour suite and fixes; frames, groups, sections and masks behaviour suite and fixes; styles and variables behaviour suite and fixes; prototyping behaviour suite and fixes; components behaviour suite and fixes; embedded image colour profiles; layers panel keyboard: F2 rename, Shift+F10 context menu, keyboard box selection, 10k-layer QA; per-side stroke weight variables; text behaviour suite: CJK line breaking, metrics, vertical trim; selection and transform behaviour suite and fixes; `.fig` import, best effort; auto layout behaviour suite and fixes; Display P3: gamut warning and soft-proof (true P3 blocked upstream); several windows; localization layer with a draft Spanish catalog; hosting figcraft-server: wss in the desktop app, server releases, deployment guide; plugin panels and settings; canvas fixes: boolean hit testing on the result, group drags, frame outlines and slices; code connect; stretch and scatter brushes, pen pressure; text on a path and pattern fills; team libraries on the server and swap library; branches: create, update from main, review and merge; animated GIF fills and TIFF images; Open recent, outlines for the selection and mask outlines: menu breadth 100%; extended collections, variables import/export, gradient stop and variant bindings; feature breadth ~80%; ready ~49%; last major: full re-measure against Figma desktop 126.10.7) · **Target:** Figma Design (desktop app 126.10.7, macOS) The authoritative assessment of how close FigCraft is to Figma Design. [`ROADMAP.md`](../ROADMAP.md) summarizes it; [`gaps.md`](gaps.md) is the ranked work list; the measured menu checklist is @@ -132,7 +132,7 @@ Breadth: does it exist. Ready: depth, correctness and fidelity for real projects | Stability | 8 | 55% | 20–40 | Never-crash lints, command guard with rollback, recovery copies, 963 tests incl. junk-parameter sweeps and a seeded retained-render walk; but two days old, one release (v0.2.0), no field reports, QA mostly on macOS | [gaps](gaps.md) | | Performance | 6 | 60% | 30–60 | `cargo xtask bench`: 50k-layer page ~8 ms zoomed out, 10k-layer edits ~0.2 ms, 2,000-instance design system edits 4–64 ms; CPU (tiny-skia) canvas where Figma renders on the GPU; nothing timed against Figma on the same file | [hardware-parity](hardware-parity.md) | | Hardware | 3 | 60% | 10–21 | Trackpad pinch and HiDPI yes; pen pressure on Windows and from browser styluses (none from macOS/Linux tablets); several windows (screen-reader tree in the main one only); no GPU canvas, no P3 on screen | [hardware-parity](hardware-parity.md) | -| Localization | 3 | 39% | 29–51 | The layer, English, Russian reviewed by VanTan, and machine drafts of Spanish (with a Latin American overlay), French, German, Brazilian Portuguese, Japanese, Korean, Simplified Chinese, Indonesian and Czech (none reviewed by a native speaker; measured 2026-10-17, the drafts cover 95–99% of the 2,272 current strings), Swedish and Turkish catalogs, CJK UI text in installed faces loaded on demand (web: only the craft-fonts CJK build); engine messages stay English | [localization-parity](localization-parity.md) | +| Localization | 3 | 39% | 29–51 | The layer, English, Russian reviewed by VanTan, and machine drafts of Spanish (with a Latin American overlay), French, German, Brazilian Portuguese, Japanese, Korean, Simplified Chinese, Indonesian and Czech (none reviewed by a native speaker; measured 2026-10-17, the drafts cover 95–99% of the 2,272 current strings), Swedish and Turkish catalogs, CJK UI text in installed faces loaded on demand (web: only the craft-fonts CJK build); engine messages stay English; Arabic draft: 2,508 entries, native review and panel mirroring pending | [localization-parity](localization-parity.md) | | Platforms | 3 | 75% | 10–20 | macOS, Windows (x64/x86/arm64), Linux, FreeBSD, web all packaged (v0.2.0); Figma also has iOS/Android apps; non-macOS QA thin | [hardware-parity](hardware-parity.md) | | Ecosystem/plugins | 3 | 40% | 6–22 | Own WASM plugins with a Rust SDK and three examples (#101), plugin panels and settings (ABI v2), widgets that take clicks (API 3), text input and a property menu (API 4), a self-hosted plugin directory on `figcraft-server`; no Figma plugin compatibility, no public catalogue or community files; the CLI, control channel and MCP server are ahead of Figma for agents | [gaps](gaps.md) | | AI features | 2 | 0% | 30–60 | None | [gaps](gaps.md) | @@ -645,6 +645,7 @@ Carried over from the ROADMAP's "Shipped so far" (2026-10-10). The test count th | Date | Change | Summary | |---|---|---| +| 2026-10-28 | minor | Arabic draft: 1,857 UI strings, 620 command labels, 31 menu wordings; count-neutral plurals and web font gate. Native review and panel mirroring remain open; grade and estimates unchanged. Evidence: `crates/ui-egui/locales/ar.toml`, i18n catalog tests and [translation notes](translating.md#arabic-draft) | | 2026-10-24 | patch | Canvas & navigation's remaining work no longer lists outline mode's Include hidden layers and Include object bounds, which landed (`view.outlinesHiddenLayers`, `view.outlinesObjectBounds`, `crates/engine/src/outline_options_tests.rs`). Numbers unchanged | | 2026-10-24 | minor | Boards (area 22, weight 0): a shared timer and voting sessions (M12); ~35%/~20% → ~40%/~24%, 30–60 h → 26–54 h; weighted numbers unchanged | | 2026-10-24 | minor | Boards (M12): templates (five built in, `board.template`) and tables (`board.table`, `board.tableEdit`); area 22 ~35%/~20% → ~40%/~24%, 30–60 h → 26–54 h (outside the weighted sum) | diff --git a/docs/translating.md b/docs/translating.md index 996f7854..cae54888 100644 --- a/docs/translating.md +++ b/docs/translating.md @@ -81,6 +81,24 @@ it (`crates/text/build.rs`); the commit releases pin doesn't yet (`docs/releasin picker leaves Georgian out. A new CJK or other non-Latin language also needs its script in `cjk::language`, or a built-in craft-fonts face. +## Arabic draft + +`ar.toml` adds العربية as a draft: 1,857 UI entries, 620 command labels and 31 menu +wordings (2,508 entries, measured 2026-10-28). Contributed by @hussain-hz with OpenAI Codex; +not yet reviewed by a native speaker. Existing language catalogs are unchanged. + +The catalog uses Modern Standard Arabic, logical Unicode order, Western digits, and Arabic +punctuation. Product names, command ids, keyboard glyphs and `{placeholders}` are preserved. +English plural entries give only `other`, with count-neutral wording such as `عدد الطبقات: {n}`. +This is deliberate: the current `Text::Plural` has no zero/two fields. It is not an implementation +of Arabic's six CLDR categories; wording remains valid for 0, 1, 2 and larger integer counts. + +Arabic text uses the existing bidi/shaping and Arabic system-font fallback on desktop. Web builds +require an embedded Noto Sans Arabic face to offer Arabic. The current web font budget filters +that face out, so Arabic is not offered on the web yet. No font is added to +this repository. The interface's panels are not mirrored; this catalog does not claim a complete +right-to-left interface. Native review and representative in-app checks remain required. + ## Adding a language 1. Copy `crates/ui-egui/locales/es.toml` to `.toml` (a BCP 47 code: `fr`, `pt-BR`, `ja`) and