الرئيسية / أدوات الصوت والفيديو / ضاغط الفيديو

ضاغط الفيديو

صغّر حجم فيديوهاتك في متصفحك. أعد الترميز إلى MP4 — لا رفع ولا تسجيل.

كيفية الاستخدام

  1. اختر ملف فيديو من جهازك.
  2. اختر إعداد الجودة (منخفضة = ملف أصغر).
  3. انقر “Compress Video” وانتظر إتمام الترميز.
  4. نزّل الفيديو المضغوط MP4.

الأسئلة الشائعة

هل هو مجاني حقًا؟

نعم — كل أداة في هذا الموقع مجانية 100% بلا حدود وبلا تسجيل وبلا علامات مائية.

هل بياناتي خاصة؟

بالتأكيد. تتم كل المعالجة محليًا في متصفحك. لا يتم تحميل ملفاتك إلى أي خادم أبدًا.

لماذا الإخراج بصيغة MP4؟

لأن MP4 يعمل في كل مكان. يعمل في Chrome وFirefox وEdge وSafari الحديث — ويدعم يوتيوب وواتساب وتليغرام ملفات MP4.

هل سيقل جودة الفيديو؟

نعم — الضغط يحذف بيانات. الجودة “المنخفضة” أصغر بكثير لكن أضبابية قليلًا؛ “العالية” تحتفظ بمعظم الجودة وملفها أكبر. اختر ما يهمك.

الدليل الكامل لضغط الفيديو

الفيديوهات كبيرة لأن كل ثانية تحفظ عشرات الصور. الضغط يعيد ترميز الفيديو بمعدل بت أقل، فيستبدل بعض التفاصيل الدقيقة بحجم أصغر بكثير. فيديو هاتف مدته دقيقة واحدة بحجم 100 ميغابايت يمكن أن يصبح 10–20 ميغابايت دون أن يبدو أسوأ على الهاتف. تفعل هذه الأداة ذلك داخل متصفحك — لا يُرفع فيديوك أبدًا، وهو ما يهم عند التعامل مع مقاطع عائلية. ملاحظة: الضغط عملية بطيئة؛ فيديو مدته 5 دقائق قد يستغرق دقيقتين للترميز. وكل مرة تضغط فيها تنخفض الجودة قليلًا، لذا اضغط دائمًا من الملف الأصلي لا من نسخة مضغوطة.

are NOT loaded on AR pages, so the featured carousel is built here too (same logic as the site's own muft63.js carousel). */ (function () { 'use strict'; var AR = { darkLabel: 'الوضع الداكن', lightLabel: 'الوضع الفاتح', darkTitle: 'تبديل الوضع الداكن', waChat: 'دردشة على واتساب', favAction: 'مفضلة', rateAction: 'قيم هذه الأداة', shareAction: 'مشاركة', shareOn: 'مشاركة على {name}', rateYour: 'تقييمك: {n}/5', useBadge: '{n} استخدام أداة على هذا الجهاز', openBtn: 'افتح', allCat: 'الكل' }; function lsGet(k, d) { try { var v = localStorage.getItem(k); return v === null ? d : JSON.parse(v); } catch (e) { return d; } } function onReady(fn) { if (document.readyState !== 'loading') fn(); else document.addEventListener('DOMContentLoaded', fn); } function enCounterpart() { var p = window.location.pathname; var m = p.match(/^(.*\/Freetools\/)ar\/(tools\/[^\/]+\.html|index\.html)$/); if (m) return m[1] + m[2]; if (p.indexOf('/ar/tools/') !== -1) return '../../tools/' + p.split('/ar/tools/')[1]; return '../index.html'; } function injectStyles() { if (document.getElementById('lang9StyleAr')) return; var st = document.createElement('style'); st.id = 'lang9StyleAr'; st.textContent = '.lang9-wrap{position:relative;display:inline-flex;align-items:center}' + '.lang9-btn{cursor:pointer;border:1px solid var(--border,#dbe2ea);background:var(--card,#fff);color:var(--ink,#0f172a);border-radius:999px;padding:7px 14px;font-size:14px;font-weight:700;line-height:1}' + '.lang9-menu{position:absolute;top:calc(100% + 6px);inset-inline-end:0;min-width:170px;margin:0;padding:6px 0;list-style:none;background:var(--card,#fff);border:1px solid var(--border,#dbe2ea);border-radius:12px;box-shadow:0 8px 24px rgba(0,0,0,.15);z-index:100;display:none}' + '.lang9-menu.open{display:block}' + '.lang9-menu button{display:block;width:100%;text-align:start;background:none;border:0;cursor:pointer;padding:9px 14px;font-size:14px;color:var(--ink,#0f172a)}' + '.lang9-menu button:hover{background:var(--bg,#f1f5f9)}' + '.lang9-menu button.on{font-weight:800}' + '.lang9-menu a{display:block;text-decoration:none;padding:9px 14px;font-size:14px;color:var(--ink,#0f172a)}' + '.lang9-menu a:hover{background:var(--bg,#f1f5f9)}'; document.head.appendChild(st); } function buildSwitcher() { if (document.getElementById('lang9Wrap')) return; var headerWrap = document.querySelector('.site-header .wrap'); if (!headerWrap) return; injectStyles(); var wrap = document.createElement('span'); wrap.className = 'lang9-wrap'; wrap.id = 'lang9Wrap'; var btn = document.createElement('button'); btn.type = 'button'; btn.id = 'langBtn9'; btn.className = 'lang9-btn'; btn.setAttribute('aria-haspopup', 'listbox'); btn.setAttribute('aria-expanded', 'false'); btn.setAttribute('aria-label', 'اللغة'); btn.textContent = 'العربية'; var menu = document.createElement('ul'); menu.className = 'lang9-menu'; menu.id = 'langMenu9'; menu.setAttribute('role', 'listbox'); var li1 = document.createElement('li'); var cur = document.createElement('button'); cur.type = 'button'; cur.className = 'on'; cur.textContent = 'العربية'; cur.setAttribute('role', 'option'); cur.addEventListener('click', function () { menu.classList.remove('open'); btn.setAttribute('aria-expanded', 'false'); }); li1.appendChild(cur); menu.appendChild(li1); var li2 = document.createElement('li'); var a = document.createElement('a'); a.href = enCounterpart(); a.textContent = 'English'; a.setAttribute('role', 'option'); li2.appendChild(a); menu.appendChild(li2); btn.addEventListener('click', function (e) { e.stopPropagation(); var open = menu.classList.toggle('open'); btn.setAttribute('aria-expanded', open ? 'true' : 'false'); }); document.addEventListener('click', function (e) { if (!wrap.contains(e.target)) { menu.classList.remove('open'); btn.setAttribute('aria-expanded', 'false'); } }); document.addEventListener('keydown', function (e) { if (e.key === 'Escape') { menu.classList.remove('open'); btn.setAttribute('aria-expanded', 'false'); } }); wrap.appendChild(btn); wrap.appendChild(menu); var navToggle = headerWrap.querySelector('.nav-toggle'); if (navToggle) headerWrap.insertBefore(wrap, navToggle); else headerWrap.appendChild(wrap); } var FEATURED = ['background-remover', 'qr-generator', 'image-compressor', 'password-generator', 'pdf-merger', 'word-counter', 'link-shortener', 'age-calculator', 'color-picker', 'images-to-pdf']; function featCardAr(slug) { var src = document.querySelector('.tool-card[href="tools/' + slug + '.html"]'); if (!src) return null; var ticonEl = src.querySelector('.ticon'); var iconHtml = ticonEl ? ticonEl.innerHTML : ''; var name = src.querySelector('h3').textContent; var desc = src.querySelector('p').textContent; var card = document.createElement('div'); card.className = 'feat-card'; card.setAttribute('data-slug', slug); var ic = document.createElement('div'); ic.className = 'feat-icon'; ic.innerHTML = iconHtml; var h = document.createElement('h3'); h.textContent = name; var p = document.createElement('p'); p.textContent = desc; var open = document.createElement('a'); open.className = 'feat-open'; open.href = 'tools/' + slug + '.html'; var osp = document.createElement('span'); osp.textContent = AR.openBtn; open.appendChild(osp); open.appendChild(document.createTextNode(' ›')); card.appendChild(ic); card.appendChild(h); card.appendChild(p); card.appendChild(open); card.addEventListener('click', function () { location.href = 'tools/' + slug + '.html'; }); return card; } function initCarouselAr() { var car = document.getElementById('featCarousel'); if (!car) return; FEATURED.forEach(function (s) { var c = featCardAr(s); if (c) car.appendChild(c); }); FEATURED.forEach(function (s) { var c = featCardAr(s); if (c) car.appendChild(c); }); var SPEED = 40, paused = false, resumeT = null, last = 0; function tick(now) { if (!paused && !document.hidden) { if (last) { car.scrollLeft += (now - last) / 1000 * SPEED; var half = car.scrollWidth / 2; if (half > 0 && car.scrollLeft >= half - 4) car.scrollLeft -= half; } last = now; } else { last = 0; } if (window.requestAnimationFrame) window.requestAnimationFrame(tick); } function pause() { paused = true; } function resume() { paused = false; } function scheduleResume(ms) { clearTimeout(resumeT); resumeT = setTimeout(resume, ms); } car.addEventListener('pointerenter', function (e) { if (e.pointerType === 'mouse') pause(); }); car.addEventListener('pointerleave', function (e) { if (e.pointerType === 'mouse') resume(); }); car.addEventListener('touchstart', pause, { passive: true }); car.addEventListener('touchend', function () { scheduleResume(2500); }); document.addEventListener('visibilitychange', function () { if (!document.hidden) resume(); }); var pv = document.getElementById('carPrev'), nx = document.getElementById('carNext'); if (pv) pv.addEventListener('click', function () { pause(); car.scrollBy({ left: -280, behavior: 'smooth' }); scheduleResume(4000); }); if (nx) nx.addEventListener('click', function () { pause(); car.scrollBy({ left: 280, behavior: 'smooth' }); scheduleResume(4000); }); if (window.requestAnimationFrame) window.requestAnimationFrame(tick); } /* AR widget dictionary: English strings rendered by shared assets/tools.js (and the rating thanks message from features.js) -> Arabic. Applied ONLY to #tool-root (plus .tool-hero .rate-msg) by the inline AR block on AR tool pages. Shared assets are never modified. Select option values are preserved (value attribute set to the original English text) so tools whose logic compares select values keep working. */ var WIDGET_AR = [ ['Click to choose files (or drag & drop here)', 'انقر لاختيار الملفات (أو اسحبها وأفلتها هنا)'], ['Copied!', 'تم النسخ!'], ['Error: ', 'خطأ: '], ['Error loading tool: ', 'خطأ في تحميل الأداة: '], ['Could not load PDF engine (internet needed once).', 'تعذّر تحميل محرك PDF (يلزم الاتصال بالإنترنت مرة واحدة).'], ['Could not load QR engine (internet needed once).', 'تعذّر تحميل محرك QR (يلزم الاتصال بالإنترنت مرة واحدة).'], ['Could not load QR reader (internet needed once).', 'تعذّر تحميل قارئ QR (يلزم الاتصال بالإنترنت مرة واحدة).'], ['Select 2+ PDF files to merge (in order)', 'اختر ملفي PDF أو أكثر للدمج (بالترتيب)'], ['Merge PDFs', 'دمج ملفات PDF'], ['Please select at least 2 PDF files.', 'يرجى اختيار ملفي PDF على الأقل.'], ['Merging...', 'جارٍ الدمج...'], ['Done! merged.pdf downloaded (', 'تم! تم تنزيل merged.pdf ('], ['Done! split.pdf downloaded.', 'تم! تم تنزيل split.pdf.'], ['Done! images.pdf downloaded (', 'تم! تم تنزيل images.pdf ('], ['Done! ', 'تم! '], ['Select a PDF file', 'اختر ملف PDF'], ['Pages to extract', 'الصفحات المطلوب استخراجها'], ['e.g. 1-3, 5, 7-9', 'مثال: 1-3، 5، 7-9'], ['Split / Extract Pages', 'تقسيم / استخراج الصفحات'], ['Select a PDF first.', 'اختر ملف PDF أولًا.'], ['Working...', 'جارٍ العمل...'], ['No valid pages. This PDF has ', 'لا توجد صفحات صالحة. يحتوي ملف PDF هذا على '], [' pages).', ' صفحة).'], [' pages.', ' صفحة.'], ['Select a PDF to compress', 'اختر ملف PDF لضغطه'], ['Compress PDF', 'ضغط PDF'], ['Compressing...', 'جارٍ الضغط...'], ['Saved ', 'تم توفير '], ['% smaller).', '% أصغر).'], ['File was already optimized.', 'الملف محسّن أصلًا.'], [' compressed.pdf downloaded.', ' تم تنزيل compressed.pdf.'], ['Extracted text will appear here...', 'سيظهر النص المستخرج هنا...'], ['Extracting text...', 'جارٍ استخراج النص...'], ['--- Page ', '--- صفحة '], ['Copy Text', 'نسخ النص'], ['Download .txt', 'تنزيل .txt'], ['Select images (JPG/PNG) — in page order', 'اختر الصور (JPG/PNG) — بترتيب الصفحات'], ['Create PDF', 'إنشاء PDF'], ['Select at least one image.', 'اختر صورة واحدة على الأقل.'], ['Creating PDF...', 'جارٍ إنشاء PDF...'], ['Rebuilds the PDF with object streams to shrink file size. Best on PDFs with lots of metadata/structure.', 'يعيد بناء PDF باستخدام تدفقات الكائنات لتقليل حجم الملف. الأفضل لملفات PDF التي تحتوي على الكثير من البيانات الوصفية والبنية.'], ['Select an image', 'اختر صورة'], ['Original: ', 'الأصلي: '], ['Quality (1-100)', 'الجودة (1-100)'], ['Compress & Download JPG', 'ضغط وتنزيل JPG'], ['Compress & Download WebP', 'ضغط وتنزيل WebP'], ['Width (px)', 'العرض (بكسل)'], ['Height (px)', 'الارتفاع (بكسل)'], [' Keep aspect ratio', ' الحفاظ على نسبة العرض إلى الارتفاع'], ['Resize & Download', 'تغيير الحجم وتنزيل'], ['Convert to', 'التحويل إلى'], ['Convert & Download', 'تحويل وتنزيل'], ['Removes solid white / light backgrounds (great for logos & product shots). For complex photos use a dedicated AI tool.', 'يزيل الخلفيات البيضاء / الفاتحة الصلبة (ممتاز للشعارات وصور المنتجات). للصور المعقدة استخدم أداة ذكاء اصطناعي مخصصة.'], ['Tolerance (0-150)', 'التحمل (0-150)'], ['Remove Background', 'إزالة الخلفية'], ['Download PNG', 'تنزيل PNG'], ['Crop & Download', 'قص وتنزيل'], ['Rotate 90°', 'تدوير 90°'], ['Rotate 180°', 'تدوير 180°'], ['Flip Horizontal', 'قلب أفقي'], ['Flip Vertical', 'قلب عمودي'], ['Download', 'تنزيل'], ['Filter', 'المرشح'], ['Grayscale', 'تدرج الرمادي'], ['Sepia', 'سيبيا'], ['Invert', 'عكس الألوان'], ['High Contrast', 'تباين عالٍ'], ['Blur', 'تمويه'], ['Vintage', 'كلاسيكي'], ['Apply Filter', 'تطبيق المرشح'], ['Reset', 'إعادة تعيين'], ['Upload the PNGs to your site root as favicon-16.png etc., or convert to .ico with any converter.', 'ارفع ملفات PNG إلى جذر موقعك بأسماء favicon-16.png وما شابه، أو حوّلها إلى .ico بأي محوّل.'], ['Generate Favicons', 'إنشاء أيقونات المفضلة'], ['Text / URL', 'النص / الرابط'], ['Size (px)', 'الحجم (بكسل)'], ['Generate QR Code', 'إنشاء رمز QR'], ['Select an image containing a QR code', 'اختر صورة تحتوي على رمز QR'], ['Reading...', 'جارٍ القراءة...'], ['QR content:', 'محتوى QR:'], ['Copy', 'نسخ'], ['No QR code found in this image.', 'لم يتم العثور على رمز QR في هذه الصورة.'], ['Paste or type your text here...', 'الصق نصك أو اكتبه هنا...'], ['Result...', 'النتيجة...'], ['Copy Result', 'نسخ النتيجة'], ['Type or paste text...', 'اكتب نصًا أو الصقه...'], ['Words', 'الكلمات'], ['Characters', 'الأحرف'], ['No spaces', 'دون مسافات'], ['Sentences', 'الجمل'], ['Paragraphs', 'الفقرات'], ['Reading time', 'وقت القراءة'], [' min', ' دقيقة'], [' characters • ', ' حرفًا • '], [' without spaces • ', ' دون مسافات • '], [' lines', ' سطرًا'], ['Type text...', 'اكتب نصًا...'], ['UPPERCASE', 'أحرف كبيرة'], ['lowercase', 'أحرف صغيرة'], ['Title Case', 'حالة العنوان'], ['Sentence case', 'حالة الجملة'], ['aLtErNaTiNg', 'متناوب'], ['Case sensitive', 'حساس لحالة الأحرف'], ['Trim whitespace', 'إزالة المسافات الزائدة'], ['Paste lines (one per line)...', 'الصق الأسطر (سطرًا في كل سطر)...'], ['Remove Duplicates', 'إزالة التكرارات'], ['Sort A-Z', 'ترتيب أ-ي'], ['Reverse Lines', 'عكس الأسطر'], ['Generated text...', 'النص المُنشأ...'], ['Generate', 'إنشاء'], ['Reverse Text', 'عكس النص'], ['Reverse Words', 'عكس الكلمات'], ['Flip Lines', 'قلب الأسطر'], ['Paste messy text...', 'الصق النص الفوضوي...'], ['Clean Up', 'تنظيف'], ['Remove ALL Spaces', 'إزالة كل المسافات'], ['Single Line', 'سطر واحد'], ['Type or paste...', 'اكتب أو الصق...'], ['Encode → Base64', 'ترميز إلى Base64'], ['Decode Base64 →', 'فك ترميز Base64'], ['Error: invalid Base64', 'خطأ: Base64 غير صالح'], ['Type or paste URL/text...', 'اكتب رابطًا أو نصًا أو الصقه...'], ['Encode URL', 'ترميز الرابط'], ['Decode URL', 'فك ترميز الرابط'], ['Error: invalid encoding', 'خطأ: ترميز غير صالح'], ['Paste JSON here...', 'الصق JSON هنا...'], ['Format / Beautify', 'تنسيق / تجميل'], ['Invalid JSON: ', 'JSON غير صالح: '], ['Minify', 'تصغير'], ['Validate', 'تحقق'], ['Valid JSON ✓', 'JSON صالح ✓'], ['Calculate', 'احسب'], ['Your birth date', 'تاريخ ميلادك'], ['Calculate Age', 'احسب العمر'], ['Pick a date.', 'اختر تاريخًا.'], ['Pick a date & time.', 'اختر تاريخًا ووقتًا.'], ['Pick both dates.', 'اختر التاريخين.'], [' days total • next birthday in ', ' يومًا إجمالًا • عيد الميلاد القادم بعد '], [' years, ', ' سنة، '], [' months, ', ' شهرًا، '], [' weeks • ', ' أسبوعًا • '], [' months • ', ' شهرًا • '], [' years', ' سنة'], [' days', ' يومًا'], ['Weight (kg)', 'الوزن (كجم)'], ['Height (cm)', 'الطول (سم)'], ['Calculate BMI', 'احسب مؤشر كتلة الجسم'], ['BMI: ', 'مؤشر كتلة الجسم: '], ['Category: ', 'الفئة: '], ['Underweight', 'نقص الوزن'], ['Normal weight', 'وزن طبيعي'], ['Overweight', 'زيادة الوزن'], ['Obese', 'سمنة'], ['Loan amount', 'مبلغ القرض'], ['Interest % / year', 'الفائدة % / سنة'], ['Years', 'السنوات'], ['Calculate EMI', 'احسب القسط الشهري'], ['Monthly payment: ', 'الدفعة الشهرية: '], ['Total payable: ', 'إجمالي المبلغ المستحق: '], [' • Total interest: ', ' • إجمالي الفائدة: '], ['Mode', 'الوضع'], ['What is X% of Y?', 'كم يساوي X% من Y؟'], ['X is what % of Y?', 'X يمثل كم % من Y؟'], ['Increase X by Y%', 'زيادة X بنسبة Y%'], ['Decrease X by Y%', 'تقليل X بنسبة Y%'], ['Bill amount', 'مبلغ الفاتورة'], ['Tip %', 'نسبة الإكرامية %'], ['People', 'عدد الأشخاص'], ['Tip: ', 'الإكرامية: '], [' • Total: ', ' • الإجمالي: '], ['Per person: ', 'للشخص الواحد: '], ['Original price', 'السعر الأصلي'], ['Discount %', 'نسبة الخصم %'], ['You pay: ', 'تدفع: '], ['You save: ', 'توفّر: '], ['Amount', 'المبلغ'], ['From', 'من'], ['To', 'إلى'], ['Uses indicative static rates. For exact transfers check your bank.', 'يستخدم أسعارًا إرشادية ثابتة. للتحويلات الدقيقة راجع مصرفك.'], ['Convert', 'حوّل'], ['Category', 'الفئة'], ['Value', 'القيمة'], ['Length', 'الطول'], ['Weight', 'الوزن'], ['Temperature', 'درجة الحرارة'], ['Volume', 'الحجم'], ['Speed', 'السرعة'], ['Data', 'البيانات'], ['Celsius', 'مئوية'], ['Fahrenheit', 'فهرنهايت'], ['Kelvin', 'كلفن'], ['Date & time', 'التاريخ والوقت'], ['From zone', 'النطاق الزمني المصدر'], ['To zone', 'النطاق الزمني الهدف'], ['Start date', 'تاريخ البدء'], ['End date', 'تاريخ الانتهاء'], ['Uppercase', 'أحرف كبيرة'], ['Lowercase', 'أحرف صغيرة'], ['Digits', 'أرقام'], ['Symbols', 'رموز'], ['Generate Password', 'إنشاء كلمة مرور'], ['Select at least one character set.', 'اختر مجموعة أحرف واحدة على الأقل.'], ['Type text to hash...', 'اكتب نصًا لتجزئته...'], ['Generate Hashes', 'إنشاء التجزئات'], ['Simple checksum:', 'مجموع تحقق بسيط:'], ['Hashes are computed locally in your browser — your text never leaves your device.', 'تُحسب التجزئات محليًا في متصفحك — لا يغادر نصك جهازك أبدًا.'], ['Min', 'الأدنى'], ['Max', 'الأقصى'], ['Count', 'العدد'], [' Unique numbers', ' أرقام فريدة'], ['Range too small for ', 'النطاق صغير جدًا لـ '], [' unique numbers.', ' رقم فريد.'], ['Flip Coin', 'اقلب العملة'], ['HEADS!', 'صورة!'], ['TAILS!', 'كتابة!'], [' — Heads: ', ' — صورة: '], [' • Tails: ', ' • كتابة: '], ['Heads', 'صورة'], ['Tails', 'كتابة'], ['Dice', 'النرد'], ['Sides', 'الأوجه'], ['Roll', 'ارمِ'], ['Pick a color', 'اختر لونًا'], ['Copy HEX', 'نسخ HEX'], ['HEX → RGB', 'HEX إلى RGB'], ['HEX to RGB', 'HEX إلى RGB'], ['Invalid HEX.', 'HEX غير صالح.'], ['RGB to HEX', 'RGB إلى HEX'], ['Generate Palette', 'إنشاء لوحة ألوان'], ['Click any color to copy its HEX code.', 'انقر على أي لون لنسخ رمز HEX الخاص به.'], ['Color 1', 'اللون 1'], ['Color 2', 'اللون 2'], ['Angle', 'الزاوية'], ['Copy CSS', 'نسخ CSS'], ['Sample Text', 'نص تجريبي'], ['Contrast ratio: ', 'نسبة التباين: '], ['WCAG AA (normal text): ', 'WCAG AA (النص العادي): '], ['PASS', 'ناجح'], ['FAIL', 'راسب'], ['Text color', 'لون النص'], ['Background', 'الخلفية'], ['Paste HTML...', 'الصق HTML...'], ['Encode HTML', 'ترميز HTML'], ['Decode HTML', 'فك ترميز HTML'], ['Paste CSS...', 'الصق CSS...'], ['Minify CSS', 'تصغير CSS'], ['Beautify CSS', 'تجميل CSS'], ['Paste JavaScript...', 'الصق JavaScript...'], ['Minify JS (basic)', 'تصغير JS (أساسي)'], ['Basic whitespace/comment minifier. For production builds use Terser or esbuild.', 'مصغّر أساسي للمسافات والتعليقات. لإصدارات الإنتاج استخدم Terser أو esbuild.'], ['How many', 'كم عددها'], ['Generate UUIDs', 'إنشاء UUIDs'], ['Copy All', 'نسخ الكل'], ['Unix timestamp → date', 'طابع Unix الزمني إلى تاريخ'], ['e.g. 1728566400', 'مثال: 1728566400'], ['To Date', 'إلى تاريخ'], ['Invalid timestamp.', 'طابع زمني غير صالح.'], ['Local:', 'المحلي:'], ['Date → timestamp', 'تاريخ إلى طابع زمني'], ['To Timestamp', 'إلى طابع زمني'], ['Seconds:', 'الثواني:'], ['Milliseconds:', 'أجزاء الألف من الثانية:'], ['Current Timestamp', 'الطابع الزمني الحالي'], ['Now (seconds):', 'الآن (بالثواني):'], ['Long URL', 'الرابط الطويل'], ['Shorten Link', 'اختصر الرابط'], ['Please paste a URL first.', 'يرجى لصق رابط أولًا.'], ['Shortening...', 'جارٍ الاختصار...'], ['Could not reach the shortening service. Check your internet and try again.', 'تعذّر الوصول إلى خدمة الاختصار. تحقق من اتصالك وحاول مجددًا.'], ['Your short link:', 'رابطك المختصر:'], ['Copy Link', 'نسخ الرابط'], ['Note: uses the free da.gd / is.gd service over HTTPS.', 'ملاحظة: يستخدم خدمة da.gd / is.gd المجانية عبر HTTPS.'], ['Type your password...', 'اكتب كلمة مرورك...'], ['Show', 'إظهار'], ['Hide', 'إخفاء'], ['Password', 'كلمة المرور'], ['How to improve', 'كيفية التحسين'], ['less than a second', 'أقل من ثانية'], [' seconds', ' ثانية'], [' minutes', ' دقيقة'], [' hours', ' ساعة'], ['Weak', 'ضعيفة'], ['Fair', 'مقبولة'], ['Good', 'جيدة'], ['Strong', 'قوية'], ['centuries', 'قرون'], [' — ', ' — '], ['Estimated time to crack: ', 'الوقت المقدر للاختراق: '], [' (10 billion guesses/sec).', ' (10 مليارات تخمين/ثانية).'], ['Make it at least 12 characters long (16+ is better).', 'اجعلها 12 حرفًا على الأقل (16+ أفضل).'], ['Add uppercase letters.', 'أضف أحرفًا كبيرة.'], ['Add lowercase letters.', 'أضف أحرفًا صغيرة.'], ['Add numbers.', 'أضف أرقامًا.'], ['Add symbols like !@#$%.', 'أضف رموزًا مثل !@#$%.'], ['Avoid repeating the same character 3+ times.', 'تجنب تكرار الحرف نفسه 3 مرات أو أكثر.'], ['Avoid common patterns and dictionary words.', 'تجنب الأنماط الشائعة وكلمات القاموس.'], ['Great! This looks like a strong password. Use a unique one per site.', 'ممتاز! تبدو كلمة مرور قوية. استخدم كلمة مختلفة لكل موقع.'], ['Checked 100% locally in your browser — your password is never sent anywhere.', 'يُفحص محليًا 100% في متصفحك — لا تُرسل كلمة مرورك إلى أي مكان أبدًا.'], ['IP address or domain — e.g. 8.8.8.8', 'عنوان IP أو نطاق — مثال: 8.8.8.8'], ['IP or domain', 'IP أو نطاق'], ['IP address', 'عنوان IP'], ['City', 'المدينة'], ['Region', 'المنطقة'], ['Country', 'الدولة'], ['ISP / Org', 'مزود الخدمة / المؤسسة'], ['Timezone', 'النطاق الزمني'], ['Latitude / Longitude', 'خط العرض / خط الطول'], ['Looking up…', 'جارٍ البحث…'], ['Lookup failed: ', 'فشل البحث: '], ['Could not reach the lookup service. Check your internet and try again.', 'تعذّر الوصول إلى خدمة البحث. تحقق من اتصالك وحاول مجددًا.'], ['Look Up', 'بحث'], ['Enter an IP address or domain first.', 'أدخل عنوان IP أو نطاقًا أولًا.'], ['My IP', 'IP الخاص بي'], ['Uses the free ipapi.co geolocation API. Locations are approximate (ISP level).', 'يستخدم واجهة ipapi.co المجانية لتحديد الموقع الجغرافي. المواقع تقريبية (على مستوى مزود الخدمة).'], ['Website URL', 'رابط الموقع'], ['Strict-Transport-Security (HSTS)', 'Strict-Transport-Security (HSTS)'], ['Forces browsers to use HTTPS only. Protects against protocol-downgrade attacks.', 'يجبر المتصفحات على استخدام HTTPS فقط. يحمي من هجمات خفض مستوى البروتوكول.'], ['Content-Security-Policy (CSP)', 'Content-Security-Policy (CSP)'], ['Controls which scripts, styles and resources may load. Key defense against XSS attacks.', 'يتحكم في النصوص والأنماط والموارد المسموح تحميلها. دفاع أساسي ضد هجمات XSS.'], ['X-Frame-Options', 'X-Frame-Options'], ['Prevents the page being embedded in iframes — stops clickjacking attacks.', 'يمنع تضمين الصفحة في إطارات — يوقف هجمات clickjacking.'], ['X-Content-Type-Options', 'X-Content-Type-Options'], ['Stops browsers "sniffing" file types — set to nosniff.', 'يمنع المتصفحات من "تخمين" أنواع الملفات — اضبطه على nosniff.'], ['Referrer-Policy', 'Referrer-Policy'], ['Controls how much referrer info is sent when users click away.', 'يتحكم في مقدار معلومات الإحالة المُرسلة عند نقر المستخدم بعيدًا.'], ['Permissions-Policy', 'Permissions-Policy'], ['Restricts powerful browser features (camera, mic, geolocation).', 'يقيّد ميزات المتصفح القوية (الكاميرا، الميكروفون، تحديد الموقع).'], ['Pass: ', 'نجاح: '], ['Fail: ', 'فشل: '], ['Score: ', 'النتيجة: '], [' security headers present.', ' تذييلة أمان موجودة.'], ['For a deeper automated scan, also try securityheaders.com.', 'لفحص آلي أعمق، جرّب أيضًا securityheaders.com.'], ['Check Headers', 'فحص التذييلات'], ['Enter a website URL first.', 'أدخل رابط موقع أولًا.'], ['Fetching headers…', 'جارٍ جلب التذييلات…'], ['No headers returned. The site may block this check — try securityheaders.com instead.', 'لم تُرجع أي تذييلات. قد يحظر الموقع هذا الفحص — جرّب securityheaders.com بدلًا من ذلك.'], ['Could not reach the header service. Check your internet and try again.', 'تعذّر الوصول إلى خدمة التذييلات. تحقق من اتصالك وحاول مجددًا.'], ['Header fetch uses the free hackertarget.com API. Explanations are educational — this is a defensive learning tool.', 'يستخدم جلب التذييلات واجهة hackertarget.com المجانية. الشروحات تعليمية — هذه أداة تعلم دفاعية.'], ['URL to analyze', 'الرابط المطلوب تحليله'], ['Paste the suspicious URL here…', 'الصق الرابط المشبوه هنا…'], ['Check URL', 'فحص الرابط'], ['That does not look like a valid URL.', 'هذا لا يبدو رابطًا صالحًا.'], ['Uses HTTPS (encrypted connection).', 'يستخدم HTTPS (اتصال مشفّر).'], ['No HTTPS — data is sent unencrypted.', 'لا يوجد HTTPS — تُرسل البيانات دون تشفير.'], ['Host is a raw IP address instead of a domain name.', 'المضيف عنوان IP خام بدلًا من اسم نطاق.'], ['Host is a domain name, not a raw IP.', 'المضيف اسم نطاق، وليس عنوان IP خام.'], ['Many subdomains (', 'نطاقات فرعية كثيرة ('], [' parts) — a common phishing trick.', ' جزء) — خدعة تصيّد شائعة.'], ['Subdomain depth looks normal.', 'عمق النطاقات الفرعية يبدو طبيعيًا.'], ['Uses a top-level domain often abused by scammers.', 'يستخدم نطاقًا علويًا كثيرًا ما يسيء المحتالون استخدامه.'], ['Top-level domain is not on the high-risk list.', 'النطاق العلوي ليس في قائمة النطاقات عالية الخطورة.'], ['Contains "@" — everything before it can be fake.', 'يحتوي على "@" — كل ما قبله قد يكون مزيفًا.'], ['No "@" trick in the URL.', 'لا توجد خدعة "@" في الرابط.'], ['Brand-like words combined with hyphens (e.g. "paypal-secure-login").', 'كلمات مشابهة لعلامات تجارية مع شرطات (مثل "paypal-secure-login").'], ['No brand-imitating hyphen pattern detected.', 'لم يُكتشف نمط شرطات مقلّد لعلامة تجارية.'], ['URL shortener hides the real destination.', 'مختصر الروابط يخفي الوجهة الحقيقية.'], ['Not a known URL shortener.', 'ليس مختصر روابط معروفًا.'], ['Very long URL (', 'رابط طويل جدًا ('], [' chars) — can hide the true domain.', ' حرفًا) — قد يخفي النطاق الحقيقي.'], ['URL length looks normal.', 'طول الرابط يبدو طبيعيًا.'], ['Contains non-Latin characters — possible homograph attack.', 'يحتوي على أحرف غير لاتينية — هجوم تشابه أحرف محتمل.'], ['No suspicious non-Latin characters.', 'لا توجد أحرف غير لاتينية مشبوهة.'], ['Numbers mixed into a sensitive-looking domain.', 'أرقام مخلوطة في نطاق يبدو حساسًا.'], ['Looks Safe', 'يبدو آمنًا'], ['Suspicious', 'مشبوه'], ['Dangerous', 'خطير'], ['Warning: ', 'تحذير: '], [' risk)', ' مخاطرة)'], [' risk', ' مخاطرة'], ['Type', 'النوع'], ['Width', 'العرض'], ['Height', 'الارتفاع'], ['https://example.com or any text', 'https://example.com أو أي نص'], ['Disclaimer: this is a first-pass heuristic check only and cannot guarantee a site is legitimate. When in doubt, never enter passwords or payment details.', 'إخلاء مسؤولية: هذا فحص استدلالي أولي فقط ولا يضمن أن الموقع شرعي. عند الشك، لا تدخل أبدًا كلمات مرور أو بيانات دفع.'], ['Analysis runs 100% locally in your browser — the URL is never sent anywhere.', 'يعمل التحليل محليًا 100% في متصفحك — لا يُرسل الرابط إلى أي مكان أبدًا.'], ['Thanks! You rated this tool ', 'شكرًا! قيّمت هذه الأداة بـ '], ['Your rating: ', 'تقييمك: '], ['Add to favorites', 'أضف إلى المفضلة'], ['Toggle dark mode', 'تبديل الوضع الداكن'] ]; /* Single words that also appear inside composite result strings (so they need fragment replacement, not just exact-node replacement). */ var WIDGET_FRAG_WORDS = { 'Weak': 1, 'Fair': 1, 'Good': 1, 'Strong': 1, 'centuries': 1, 'Underweight': 1, 'Overweight': 1, 'Obese': 1, 'Suspicious': 1, 'Dangerous': 1, 'Heads': 1, 'Tails': 1 }; /* ---- AR widget translation (tools.js output) ---- */ (function () { var EXACT = {}; WIDGET_AR.forEach(function (p) { if (p[0] !== p[1]) EXACT[p[0]] = p[1]; }); var PAIRS = WIDGET_AR.filter(function (p) { return p[0] !== p[1]; }); PAIRS.sort(function (a, b) { return b[0].length - a[0].length; }); function isFrag(en) { if (WIDGET_FRAG_WORDS[en]) return true; return /[^A-Za-z]/.test(en); } function translateString(v) { if (EXACT[v] !== undefined) return EXACT[v]; var t = v, changed = false; for (var i = 0; i < PAIRS.length; i++) { var en = PAIRS[i][0]; if (!isFrag(en)) continue; if (t.indexOf(en) !== -1) { t = t.split(en).join(PAIRS[i][1]); changed = true; } } return changed ? t : v; } function translateNode(node) { var v = node.nodeValue; var tr = v.trim(); if (tr && EXACT[tr] !== undefined) { node.nodeValue = v.replace(tr, EXACT[tr]); return; } if (!v || v.indexOf(' ') === -1 && !EXACT[v]) { if (EXACT[v] !== undefined) node.nodeValue = EXACT[v]; return; } /* Skip the QR-reader echo node (user data, not UI text). */ var par = node.parentNode; if (par && par.className && par.className.indexOf('big') !== -1) { var prev = par.previousElementSibling; if (prev && (prev.textContent.indexOf('QR content') !== -1 || prev.textContent.indexOf('محتوى') !== -1)) return; } /* Skip link text (URLs) and textarea default text (user-editable samples). */ if (par && par.tagName === 'A') return; if (par && par.tagName === 'TEXTAREA') return; /* Preserve select-option values so value-compared tools keep working. */ if (par && par.tagName === 'OPTION' && EXACT[v] !== undefined && !par.hasAttribute('value')) { par.setAttribute('value', v); } var nv = translateString(v); if (nv !== v) node.nodeValue = nv; } function translateAttrs(el) { var ph = el.getAttribute && el.getAttribute('placeholder'); if (ph && EXACT[ph] !== undefined) el.setAttribute('placeholder', EXACT[ph]); var ti = el.getAttribute && el.getAttribute('title'); if (ti && EXACT[ti] !== undefined) el.setAttribute('title', EXACT[ti]); var al = el.getAttribute && el.getAttribute('aria-label'); if (al && EXACT[al] !== undefined) el.setAttribute('aria-label', EXACT[al]); } function translateTree(root) { if (!root) return; var walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT, null, false); var nodes = [], n; while ((n = walker.nextNode())) nodes.push(n); nodes.forEach(translateNode); var els = root.querySelectorAll ? root.querySelectorAll('input,textarea,select,button,a') : []; for (var i = 0; i < els.length; i++) translateAttrs(els[i]); translateAttrs(root); } function translateHeroRate() { var rm = document.querySelector('.tool-hero .rate-msg'); if (!rm) return; var walker = document.createTreeWalker(rm, NodeFilter.SHOW_TEXT, null, false); var nodes = [], n; while ((n = walker.nextNode())) nodes.push(n); nodes.forEach(function (tn) { var nv = translateString(tn.nodeValue); if (nv !== tn.nodeValue) tn.nodeValue = nv; }); } function translatePdfTextValue() { var root = document.getElementById('tool-root'); if (!root || root.getAttribute('data-tool') !== 'pdf-to-text') return; var ta = root.querySelector('textarea'); if (!ta) return; var v = ta.value; if (!v) return; var nv = v.split('Extracting text...').join('جارٍ استخراج النص...') .split('Error: ').join('خطأ: ') .split('--- Page ').join('--- صفحة '); if (nv !== v) ta.value = nv; } var busy = false; function runAll() { if (busy) return; busy = true; try { translateTree(document.getElementById('tool-root')); translateHeroRate(); translatePdfTextValue(); } catch (e) {} busy = false; } function initWidgetAr() { runAll(); var root = document.getElementById('tool-root'); if (root && window.MutationObserver) { var mo = new MutationObserver(function () { runAll(); }); mo.observe(root, { childList: true, subtree: true, characterData: true }); } var rm = document.querySelector('.tool-hero .rate-msg'); if (rm && window.MutationObserver) { var mo2 = new MutationObserver(function () { translateHeroRate(); }); mo2.observe(rm, { childList: true, subtree: true, characterData: true }); } /* pdf-to-text writes system text into a textarea value (no DOM mutation fires), so poll that one readonly output only. */ var rootEl = document.getElementById('tool-root'); if (rootEl && rootEl.getAttribute('data-tool') === 'pdf-to-text') { setInterval(translatePdfTextValue, 800); } } window.__initWidgetAr = initWidgetAr; })(); onReady(function () { buildSwitcher(); var dark = document.getElementById('darkToggle'); if (dark) { var setLabel = function () { dark.textContent = document.body.classList.contains('dark') ? AR.lightLabel : AR.darkLabel; }; dark.title = AR.darkTitle; dark.setAttribute('aria-label', AR.darkTitle); setLabel(); dark.addEventListener('click', function () { setTimeout(setLabel, 0); }); } var badge = document.getElementById('useBadge'); if (badge) badge.textContent = AR.useBadge.replace('{n}', lsGet('fpt_usage', 0)); var chips = document.querySelectorAll('#catChips .chip'); if (chips.length && chips[0].textContent === 'All') chips[0].textContent = AR.allCat; document.querySelectorAll('.tool-actions .action-label').forEach(function (lab) { var t = lab.textContent; if (t === 'Favorite') lab.textContent = AR.favAction; else if (t === 'Rate this tool') lab.textContent = AR.rateAction; else if (t === 'Share') lab.textContent = AR.shareAction; }); var star = document.querySelector('.tool-hero .fav-star'); if (star) { star.title = AR.favAction; star.setAttribute('aria-label', AR.favAction); } document.querySelectorAll('.tool-hero .share-btn').forEach(function (a) { var t = a.getAttribute('title') || a.getAttribute('aria-label') || ''; var m = /Share on (.+)$/.exec(t); if (m) { var nt = AR.shareOn.replace('{name}', m[1]); a.title = nt; a.setAttribute('aria-label', nt); } }); var rateMsg = document.querySelector('.tool-hero .rate-msg'); var rootEl = document.getElementById('tool-root'); if (rateMsg && rootEl) { var ratings = lsGet('fpt_ratings', {}); var my = ratings[rootEl.getAttribute('data-tool')] || 0; if (my) rateMsg.textContent = AR.rateYour.replace('{n}', my); } document.querySelectorAll('.fav-star').forEach(function (s) { s.title = AR.favAction; s.setAttribute('aria-label', AR.favAction); }); var wa = document.getElementById('wa-float-btn'); if (wa) { wa.title = AR.waChat; wa.setAttribute('aria-label', AR.waChat); } var ban = document.getElementById('adCookieBanner'); if (ban) { var sp = ban.querySelector('span'); if (sp) sp.textContent = 'نستخدم ملفات تعريف الارتباط للتحليلات (Google Analytics) لفهم الزيارات وتحسين موقعنا. اقبل للسماح بملفات تعريف ارتباط التحليلات أو ارفض.'; var acc = document.getElementById('adCookieAccept'); if (acc) acc.textContent = 'قبول'; var dec = document.getElementById('adCookieDecline'); if (dec) dec.textContent = 'رفض'; } initCarouselAr(); if (window.__initWidgetAr) window.__initWidgetAr(); }); })();