1/* Sniper - English / Arabic. 2 Swaps every element carrying data-i18n, flips the document to RTL, and loads the 3 Arabic face. The layout mirrors on its own because the stylesheet uses logical 4 properties throughout - nothing here touches CSS beyond setting dir. 5 6 Scope note, honestly stated: this covers the interface and the copy written for 7 these pages. PRODUCT names and descriptions come from the catalogue and are 8 English-only until the Arabic fields are migrated from the store - they fall back 9 to English rather than showing an empty line, which is the rule in section 14.1 10 of the plan. */ 11(function () { 12 "use strict"; 13 14 var KEY = "sniper.lang.v1"; 15 16 var AR = { 17 /* ---- top bar ---- */ 18 "top.safety": "٠عدات Ø³ÙØ§Ù Ø© ٠عت٠دة تÙÙØ±ÙÙØ¯ ÙÙ Ø§ÙØ¨ØØ±ÙÙ ÙØ¯ÙÙ Ø§ÙØ®ÙÙØ¬", 19 "top.shopping": "ØªÙØµÙ٠٠جاÙÙ Ø¯Ø§Ø®Ù Ø§ÙØ¨ØØ±ÙÙ ÙÙØ·Ùبات ÙÙÙ {amount} · Ø´ØÙ ÙØ¯ÙÙ Ø§ÙØ®ÙÙØ¬", 20 "top.lang": "English", 21 22 /* ---- navigation ---- */ 23 "nav.home": "Ø§ÙØ±Ø¦ÙØ³ÙØ©", 24 "nav.sections": "Ø£ÙØ³Ø§Ù Ø§ÙØ³Ùا٠ة", 25 "nav.industries": "اÙÙØ·Ø§Ø¹Ø§Øª", 26 "nav.brands": "تسÙÙ ØØ³Ø¨ Ø§ÙØ¹Ùا٠ة", 27 "nav.about": "Ù Ù ÙØÙ", 28 "nav.contact": "Ø§ØªØµÙ Ø¨ÙØ§", 29 "nav.collection": "Ø§ÙØªØ´ÙÙÙØ©", 30 "nav.summer": "تشÙÙÙØ© Ø§ÙØµÙÙ", 31 "nav.search": "Ø¨ØØ«", 32 "nav.cart": "Ø§ÙØ³ÙØ©", 33 "nav.account": "ØØ³Ø§Ø¨Ù", 34 "nav.quote": "Ø·ÙØ¨ عرض سعر", 35 36 /* ---- cross-division block ---- */ 37 "cross.shopping": "Ø³ÙØ§Ùبر Ù 5.11", 38 "cross.shopping.sub": "ØªÙØªÙÙØ§Ù ÙØ®Ø§Ø±Ø¬Ù", 39 "cross.safety": "Ø³ÙØ§Ùبر ÙÙØ³Ùا٠ة", 40 "cross.safety.sub": "Ù٠٠ستعدا٠· ابÙÙ Ø¢Ù ÙØ§Ù", 41 42 /* ---- mega menu, safety ---- */ 43 "mega.ppe": "٠عدات اÙÙÙØ§ÙØ© Ø§ÙØ´Ø®ØµÙØ©", 44 "mega.fall": "Ø§ÙØÙ Ø§ÙØ© Ù Ù Ø§ÙØ³ÙÙØ· ÙØ§Ùع٠٠عÙÙ Ø§Ø±ØªÙØ§Ø¹", 45 "mega.breathing": "Ø£Ø¬ÙØ²Ø© Ø§ÙØªÙÙØ³ ÙØ§ÙØ¥ÙÙØ§Ø°", 46 "mega.gas": "ÙØ´Ù Ø§ÙØºØ§Ø²Ø§Øª ÙØ§ÙÙ Ø±Ø§ÙØ¨Ø©", 47 "mega.measuring": "Ø£Ø¬ÙØ²Ø© اÙÙÙØ§Ø³", 48 "mega.lighting": "Ø§ÙØ¥Ø¶Ø§Ø¡Ø© Ø§ÙØµÙØ§Ø¹ÙØ© ÙØ¥Ø¶Ø§Ø¡Ø© Ø§ÙØ³Ùا٠ة", 49 "mega.road": "Ø§ÙØ·Ø±Ù ÙØ§ÙÙ Ø±ÙØ± ÙØ§ÙØ¥ÙØ´Ø§Ø¡Ø§Øª", 50 "mega.envspec": "Ø§ÙØ¨Ùئة ÙØ§Ù٠عدات اÙ٠تخصصة", 51 "mega.person": "ØÙ Ø§ÙØ© Ø§ÙØ´Ø®Øµ", 52 "mega.detect": "Ø§ÙØªÙÙØ³ ÙØ§ÙÙØ´Ù", 53 "mega.site": "ØÙ Ø§ÙØ© اÙÙ ÙÙØ¹", 54 "mega.access": "Ø§ÙØªØÙÙ Ø¨Ø§ÙØ¯Ø®ÙÙ", 55 "mega.shopby": "تسÙÙ ØØ³Ø¨", 56 "mega.cert": "Ù Ø¹ÙØ§Ø± Ø§ÙØ§Ø¹ØªÙ اد", 57 "mega.brand": "Ø§ÙØ¹Ùا٠ة Ø§ÙØªØ¬Ø§Ø±ÙØ©", 58 "mega.promo.title": "تجÙÙØ² Ù ÙÙØ¹ ÙØ§Ù ÙØ", 59 "mega.promo.body": "أرس٠ÙÙØ§ ÙØ§Ø¦Ù Ø© اÙÙÙ ÙØ§Øª Ø£Ù ÙØ´Ù اÙÙ ÙØ§Ùصة ÙØ³ÙÙÙÙ ÙØ±ÙÙ Ø§ÙØ³Ùا٠ة Ø¨ØªØ³Ø¹ÙØ±Ùا Ø¨ÙØ¯Ø§Ù Ø¨ÙØ¯Ø§ÙØ Ù Ø¹ أسعار Ø§ÙØ¬Ù ÙØ© ÙØ´Ø±ÙØ· ائت٠ا٠ÙÙØØ³Ø§Ø¨Ø§Øª اÙ٠عت٠دة.", 60 "mega.promo.cta": "Ø§Ø·ÙØ¨ عرض سعر", 61 62 /* ---- mega menu, shopping ---- */ 63 "mega.apparel": "Ù ÙØ§Ø¨Ø³", 64 "mega.men": "رجاÙ", 65 "mega.women": "ÙØ³Ø§Ø¡", 66 "mega.footwear": "Ø£ØØ°ÙØ©", 67 "mega.bags": "ØÙائب", 68 "mega.accessories": "Ø¥ÙØ³Ø³Ùارات", 69 "mega.bundle.title": "ÙÙÙÙ Ø¨Ø§ÙØªÙ", 70 "mega.bundle.body": "اختر ٠ا ØªØ±ÙØ¯ Ù Ù Ø§ÙØªØ´ÙÙÙØ© ÙÙÙØ·Ø¨ÙÙÙ Ø§ÙØ®ØµÙ تÙÙØ§Ø¦Ùا٠ÙÙ Ø§ÙØ³ÙØ© - بدÙ٠ر٠ز Ø®ØµÙ ÙØ¨Ø¯ÙÙ Ù ÙØ§Ø¬Ø¢Øª Ø¹ÙØ¯ Ø§ÙØ¯Ùع.", 71 "mega.bundle.cta": "ابدأ Ø¨Ø§ÙØªÙ", 72 73 /* ---- sections, safety home ---- */ 74 "sec.kicker.sections": "Ø£ÙØ³Ø§Ù Ø§ÙØ³Ùا٠ة", 75 "sec.categories": "تسÙÙ ØØ³Ø¨ اÙÙØ¦Ø©", 76 "sec.viewall.sections": "ÙÙ Ø§ÙØ£Ùسا٠", 77 "sec.kicker.instock": "٠تÙÙØ± Ø§ÙØ¢Ù", 78 "sec.featured": "Ù ÙØªØ¬Ø§Øª Ø§ÙØ³Ùا٠ة اÙ٠ختارة", 79 "sec.allproducts": "Ù٠اÙÙ ÙØªØ¬Ø§Øª", 80 "sec.kicker.industry": "٠باشرة٠إÙ٠٠ا ÙØØªØ§Ø¬Ù Ø¹Ù ÙÙ", 81 "sec.industries": "تسÙÙ ØØ³Ø¨ اÙÙØ·Ø§Ø¹", 82 "sec.allindustries": "Ù٠اÙÙØ·Ø§Ø¹Ø§Øª", 83 "sec.kicker.brands": "Ø´Ø±ÙØ§Øª Ù ØµÙØ¹Ø© ٠عت٠دة", 84 "sec.brands": "تسÙÙ ØØ³Ø¨ Ø§ÙØ¹Ùا٠ة", 85 "sec.allbrands": "ÙÙ Ø§ÙØ¹Ùا٠ات", 86 "sec.kicker.why": "Ù٠اذا Ø³ÙØ§Ùبر ÙÙØ³Ùا٠ة", 87 "sec.why": "ÙØ´ØªØ±ÙÙØ§ Ù Ù ÙØ§ ÙØØªÙ Ù Ø£Ù ØªØ®Ø°ÙÙ", 88 89 /* ---- sections, shopping home ---- */ 90 "sec.kicker.collection": "Ø§ÙØªØ´ÙÙÙØ©", 91 "sec.viewall": "ØªØµÙØ اÙÙÙ", 92 "sec.kicker.new": "ÙØµÙ ØØ¯ÙثاÙ", 93 "sec.new": "Ø£ØØ¯Ø« اÙÙ ÙØªØ¬Ø§Øª", 94 "sec.kicker.popular": "٠تÙÙØ± Ø§ÙØ¢Ù", 95 "sec.popular": "Ø§ÙØ£Ùثر Ø·ÙØ¨Ø§Ù ÙØ°Ø§ Ø§ÙØ´Ùر", 96 "sec.kicker.ourbrands": "Ø§ÙØ¹Ùا٠ات Ø§ÙØªÙ ÙÙÙØ±Ùا", 97 "sec.ourbrands": "Ø¹ÙØ§Ù Ø§ØªÙØ§ Ø§ÙØªØ¬Ø§Ø±ÙØ©", 98 "sec.kicker.whysniper": "Ù٠اذا Ø³ÙØ§Ùبر", 99 "sec.whysniper": "Ù٠اذا Ø³ÙØ§ÙبرØ", 100 "sec.shopbags": "تسÙÙ Ø§ÙØÙØ§Ø¦Ø¨", 101 102 /* ---- hero, safety ---- */ 103 "hero.kicker": "Ù٠٠ستعدا٠· ابÙÙ Ø¢Ù ÙØ§Ù", 104 "hero.title": "جÙÙØ² Ù٠عا٠Ù. اØÙ Ù ÙÙ ÙØ±Ø¯ÙØ©.", 105 "hero.body": "٠عدات ÙÙØ§ÙØ© Ø´Ø®ØµÙØ© Ù Ø¹ØªÙ Ø¯Ø©Ø ÙØÙ Ø§ÙØ© Ù Ù Ø§ÙØ³ÙÙØ·Ø ÙÙØ´Ù Ø§ÙØºØ§Ø²Ø§ØªØ Ù٠عدات Ø³ÙØ§Ù Ø© اÙÙ ÙØ§Ùع ÙÙÙ ØØªØ±ÙÙÙ ÙØ§ÙÙ ÙØ§ÙÙÙÙ ÙØ¥Ø¯Ø§Ø±Ø§Øª اÙÙ Ø´ØªØ±ÙØ§Øª ÙÙ Ø§ÙØ¨ØØ±ÙÙ ÙØ¯ÙÙ Ø§ÙØ®ÙÙØ¬.", 106 "hero.cta1": "تسÙ٠٠عدات Ø§ÙØ³Ùا٠ة", 107 "hero.cta2": "Ø§Ø·ÙØ¨ عرض سعر ÙÙØ´Ø±Ùات", 108 "strip.cr": "Ù ÙØ±Ùد ٠سج٠· س.ت 55377-11", 109 "strip.delivery": "ØªÙØµÙÙ Ø¯Ø§Ø®Ù Ø§ÙØ¨ØØ±ÙÙ ÙØ´ØÙ Ø®ÙÙØ¬Ù", 110 "strip.brands": "Ø¹ÙØ§Ù ات ٠عت٠دة ٠تÙÙØ±Ø© Ù٠اÙ٠خزÙÙ", 111 "strip.corporate": "ØØ³Ø§Ø¨Ø§Øª Ø´Ø±ÙØ§Øª ÙØ£Ø³Ø¹Ø§Ø± Ø¬Ù ÙØ©", 112 113 /* ---- hero, shopping ---- */ 114 "vhero.kicker": "Ù ÙØ§Ø¨Ø³ Ø§ÙØ£Ø¯Ø§Ø¡ Ø§ÙØªÙتÙÙÙ", 115 "vhero.line1": "٠صÙÙØ¹ ÙÙØ£Ø¯Ø§Ø¡.", 116 "vhero.line2": "ÙØÙ ÙØªØØ¯Ø« Ø¨Ø§ÙØ¬Ùدة.", 117 "vhero.sub": "ÙØ§Ø¨Ù ÙÙØªÙÙØ³. ثابت اÙÙÙÙ. Ù ÙØ§ÙÙ ÙÙØ§ÙÙ٠اش.", 118 "vhero.cta1": "تسÙÙ ØØ³Ø¨ اÙÙØ¦Ø©", 119 "vhero.cta2": "ÙØµÙ ØØ¯ÙثاÙ", 120 "vstrip.delivery": "ØªÙØµÙ٠٠جاÙÙ ÙÙØ·Ùبات ÙÙÙ {amount}", 121 "vstrip.gcc": "Ø´ØÙ Ø¥Ù٠دÙÙ Ø§ÙØ®ÙÙØ¬", 122 "vstrip.since": "ÙØ¹Ù Ù Ù ÙØ° 2010", 123 "vstrip.branches": "ÙØ±Ø¹Ø§Ù ÙÙ Ø§ÙØ¨ØØ±ÙÙ", 124 125 /* ---- product card ---- */ 126 "card.add": "أض٠إÙÙ Ø§ÙØ³ÙØ©", 127 "card.options": "اختر Ø§ÙØ®Ùارات", 128 "card.unavailable": "ØºÙØ± ٠تÙÙØ±", 129 "card.quote": "أض٠إÙ٠عرض Ø§ÙØ³Ø¹Ø±", 130 "card.instock": "٠تÙÙØ±", 131 "card.oos": "ØºÙØ± ٠تÙÙØ±", 132 "card.bulk": "Ù ØªØ§Ø Ø¨Ø§ÙØ¬Ù ÙØ©", 133 "card.sale": "تخÙÙØ¶", 134 "card.onrequest": "Ø§ÙØ³Ø¹Ø± Ø¹ÙØ¯ Ø§ÙØ·Ùب", 135 136 /* ---- footer ---- */ 137 "foot.about.safety": "ÙØ³Ù Ø§ÙØ³Ùا٠ة ÙÙ Ø³ÙØ§Ùبر. ٠عدات ØÙ Ø§ÙØ© Ø´Ø®ØµÙØ© ÙÙ ÙØ§Ùع Ù Ø¹ØªÙ Ø¯Ø©Ø ØªÙÙØ±ÙÙØ¯ ÙÙ Ø§ÙØ¨ØØ±ÙÙ ÙØ¯ÙÙ Ø§ÙØ®ÙÙØ¬ Ù ÙØ° 2010.", 138 "foot.about.shopping": "Ù ÙØ§Ø¨Ø³ ÙØ£ØØ°ÙØ© Ù٠عدات ØªÙØªÙÙÙØ© ÙØ®Ø§Ø±Ø¬ÙØ© ÙÙ ÙÙÙØ©. ÙØ®Ø¯Ù Ù Ù ÙÙØ© Ø§ÙØ¨ØØ±ÙÙ Ù ÙØ° 2010Ø ÙÙØ´ØÙ Ø¥Ù٠دÙÙ Ø§ÙØ®ÙÙØ¬.", 139 "foot.sections": "Ø£ÙØ³Ø§Ù Ø§ÙØ³Ùا٠ة", 140 "foot.more": "Ø£ÙØ³Ø§Ù أخرÙ", 141 "foot.company": "Ø§ÙØ´Ø±ÙØ©", 142 "foot.contact": "ØªÙØ§ØµÙ Ù Ø¹ÙØ§", 143 "foot.shop": "تسÙÙ", 144 "foot.rights": "Ø¬Ù ÙØ¹ Ø§ÙØÙÙÙ Ù ØÙÙØ¸Ø©", 145 "foot.quote": "Ø§Ø·ÙØ¨ عرض سعر", 146 "foot.shopcta": "تسÙÙ Ø§ÙØªØ´ÙÙÙØ©", 147 "foot.cr": "سج٠تجارÙ", 148 "foot.vat": "Ø§ÙØ±ÙÙ Ø§ÙØ¶Ø±ÙبÙ", 149 "gcc.badge": "ØªÙØµÙÙ ÙØ¬Ù ÙØ¹ دÙÙ Ø§ÙØ®ÙÙØ¬", 150 "gcc.t1": "ÙØ´ØÙ ÙØ¬Ù ÙØ¹", 151 "gcc.t2": "دÙÙ Ø§ÙØ®ÙÙØ¬", 152 "gcc.sub": "Ù Ù Ø§ÙØ¨ØØ±Ù٠إÙÙ ÙÙ Ø§ÙØ®ÙÙØ¬ - ÙÙØµÙ ٠عدات٠ÙÙ ÙØ§Ø¨Ø³Ù ٠باشرة Ø¥Ù٠باب Ù ÙØ²ÙÙ ÙÙ Ø£Ù Ù ÙØ§Ù Ù٠دÙÙ Ù Ø¬ÙØ³ Ø§ÙØªØ¹Ø§ÙÙ Ø§ÙØ®ÙÙØ¬Ù.", 153 "gcc.shop": "تسÙÙ Ù ÙØªØ¬Ø§ØªÙا", 154 "gcc.note": "ØªÙØµÙÙ Ø³Ø±ÙØ¹ Ù٠تتبÙÙØ¹ ÙØ¬Ù ÙØ¹ دÙÙ Ù Ø¬ÙØ³ Ø§ÙØªØ¹Ø§ÙÙ", 155 "gcc.bh": "Ø§ÙØ¨ØØ±ÙÙ", 156 "gcc.sa": "Ø§ÙØ³Ø¹ÙØ¯ÙØ©", 157 "gcc.ae": "Ø§ÙØ¥Ù ارات", 158 "gcc.kw": "اÙÙÙÙØª", 159 "gcc.qa": "ÙØ·Ø±", 160 "gcc.om": "عÙ٠اÙ", 161 "foot.delivery": "Ø§ÙØªÙصÙÙ ÙØ§ÙØ´ØÙ", 162 "foot.returns": "Ø§ÙØ¥Ø±Ø¬Ø§Ø¹ ÙØ§Ùاسترداد", 163 "foot.terms": "Ø§ÙØ´Ø±ÙØ· ÙØ§ÙØ£ØÙا٠", 164 "foot.privacy": "Ø³ÙØ§Ø³Ø© Ø§ÙØ®ØµÙØµÙØ©", 165 "foot.contactUs": "Ø§ØªØµÙ Ø¨ÙØ§", 166 "legal.returns.lead": "ØºÙØ±Øª رأÙ٠أ٠ÙÙØ§Ù خطأ ÙÙ Ø·ÙØ¨ÙØ Ø¥ÙÙ٠طرÙÙØ© Ø§ÙØ¥Ø±Ø¬Ø§Ø¹ ÙØ§Ùاسترداد.", 167 "legal.delivery.lead": "Ø£ÙÙ ÙÙØµÙØ ÙÙÙ ÙÙÙÙØ ÙÙÙ ÙØ³ØªØºØ±Ù.", 168 "legal.terms.lead": "Ø§ÙØ´Ø±ÙØ· Ø§ÙØªÙ ØªÙØ·Ø¨Ù Ø¹ÙØ¯ استخدا٠٠ÙÙØ°Ø§ اÙÙ ÙÙØ¹ ÙØ§ÙØ·ÙØ¨ Ù ÙØ§.", 169 "legal.privacy.lead": "٠ا Ø§ÙØ¨ÙØ§ÙØ§Øª Ø§ÙØªÙ ÙØ¬Ù Ø¹ÙØ§Ø ÙÙÙ Ø§Ø°Ø§Ø Ù٠ا ÙÙ ØÙÙÙÙ.", 170 "order.invoice": "اÙÙØ§ØªÙرة (ÙÙØ·Ø¨Ø§Ø¹Ø© Ø£Ù Ø§ÙØÙØ¸ PDF)", 171 "order.proforma": "ÙØ§ØªÙرة Ù Ø¨Ø¯Ø¦ÙØ©", 172 "checkout.vat": "Ø§ÙØ£Ø³Ø¹Ø§Ø± ØªØ´Ù Ù Ø¶Ø±ÙØ¨Ø© اÙÙÙÙ Ø© اÙÙ Ø¶Ø§ÙØ© ØÙث٠ا ØªÙØ·Ø¨Ù.", 173 "checkout.agree": "Ø¨ØªÙØ¯ÙÙ Ø§ÙØ·Ùب ÙØ¥ÙÙ ØªÙØ§Ù٠عÙÙ {terms} Ù{returns} Ù{privacy}.", 174 175 /* ---- listing ---- */ 176 "list.filters": "Ø§ÙØªØµÙÙØ©", 177 "list.clear": "Ù Ø³Ø Ø§ÙÙÙ", 178 "list.sort.featured": "Ø§ÙØªØ±ØªÙب: اÙÙ Ù ÙØ²Ø©", 179 "list.sort.priceasc": "Ø§ÙØ³Ø¹Ø±: Ù Ù Ø§ÙØ£ÙÙ ÙÙØ£Ø¹ÙÙ", 180 "list.sort.pricedesc": "Ø§ÙØ³Ø¹Ø±: Ù Ù Ø§ÙØ£Ø¹ÙÙ ÙÙØ£ÙÙ", 181 "list.sort.name": "Ø§ÙØ§Ø³Ù : Ø£ Ø¥ÙÙ Ù", 182 "list.loadmore": "عرض اÙÙ Ø²ÙØ¯", 183 "list.grid": "عرض شبÙÙ", 184 "list.list": "عرض ÙØ§Ø¦Ù Ø©", 185 "filter.gender": "اÙÙÙØ¹", 186 "filter.industry": "اÙÙØ·Ø§Ø¹", 187 "filter.men": "رجاÙ", 188 "filter.women": "ÙØ³Ø§Ø¡", 189 "cat.products": "Ù ÙØªØ¬", 190 "cat.shown": "Ù Ø¹Ø±ÙØ¶", 191 "cat.borrow": "ÙØ§ ØªÙØ¬Ø¯ Ù ÙØªØ¬Ø§Øª ÙÙØ§ بعد - ÙØ¹Ø±Ø¶ Ù٠٠ا ÙÙ {name}.", 192 "cat.industryBlurb": "٠عدات Ø³ÙØ§Ù Ø© ٠ختارة ÙÙØ·Ø§Ø¹ {name} - Ù٠اÙÙØ¦Ø§Øª ÙÙ Ù ÙØ§Ù ÙØ§ØØ¯. استخد٠اÙÙÙØ§ØªØ± ÙØªØ¶ÙÙÙ Ø§ÙØ¨ØØ«.", 193 194 /* ---- sorting ---- */ 195 "sort.best": "Ø§ÙØªØ±ØªÙب: Ø§ÙØ£Ùثر Ù Ø¨ÙØ¹Ø§Ù",
196 "sort.newest": "Ø§ÙØ£ØØ¯Ø« Ø£ÙÙØ§Ù", 197 "sort.priceasc": "Ø§ÙØ³Ø¹Ø±: Ù Ù Ø§ÙØ£Ù٠إÙÙ Ø§ÙØ£Ø¹ÙÙ", 198 "sort.pricedesc": "Ø§ÙØ³Ø¹Ø±: Ù Ù Ø§ÙØ£Ø¹Ù٠إÙÙ Ø§ÙØ£ÙÙ", 199 "sort.name": "Ø§ÙØ§Ø³Ù : Ø£ Ø¥ÙÙ Ù", 200 201 /* ---- product page ---- */ 202 /* ---- sign in, account, loyalty ---- */ 203 "auth.signin": "تسجÙÙ Ø§ÙØ¯Ø®ÙÙ", 204 "auth.createAccount": "Ø¥ÙØ´Ø§Ø¡ ØØ³Ø§Ø¨", 205 "auth.name": "Ø§ÙØ§Ø³Ù اÙÙØ§Ù Ù", 206 "auth.email": "Ø§ÙØ¨Ø±Ùد Ø§ÙØ¥ÙÙØªØ±ÙÙÙ", 207 "auth.password": "ÙÙÙ Ø© اÙÙ Ø±ÙØ±", 208 "auth.passHint": "Ù¨ Ø£ØØ±Ù عÙÙ Ø§ÙØ£ÙÙ", 209 "auth.forgot": "ÙØ³Ùت ÙÙÙ Ø© اÙÙ Ø±ÙØ±Ø", 210 "auth.forgotTitle": "إعادة تعÙÙÙ ÙÙÙ Ø© اÙÙ Ø±ÙØ±", 211 "auth.forgotLead": "Ø£Ø¯Ø®Ù Ø¨Ø±ÙØ¯Ù Ø§ÙØ¥ÙÙØªØ±ÙÙÙ ÙØ³Ùرس٠ÙÙ Ø±Ø§Ø¨Ø·Ø§Ù ÙØªØ¹ÙÙÙ ÙÙÙ Ø© Ù Ø±ÙØ± Ø¬Ø¯ÙØ¯Ø©.", 212 "auth.sendLink": "Ø¥Ø±Ø³Ø§Ù Ø§ÙØ±Ø§Ø¨Ø·", 213 "auth.backToSignin": "Ø§ÙØ¹Ùدة ÙØªØ³Ø¬ÙÙ Ø§ÙØ¯Ø®ÙÙ", 214 "auth.resetSent": "إذا ÙØ§Ù ÙÙØ°Ø§ Ø§ÙØ¨Ø±Ùد ØØ³Ø§Ø¨Ø ÙØ§Ùرابط Ù٠طرÙÙ٠إÙÙÙ.", 215 "auth.haveAccount": "ÙØ¯ÙÙ ØØ³Ø§Ø¨ باÙÙØ¹ÙØ", 216 "auth.noAccount": "Ø¬Ø¯ÙØ¯ ÙÙØ§Ø", 217 "auth.guest": "ÙØ§ ØªØØªØ§Ø¬ Ø¥ÙÙ ØØ³Ø§Ø¨ ÙÙØ·Ùب - ÙÙ ÙÙÙ Ø¥ØªÙ Ø§Ù Ø§ÙØ´Ø±Ø§Ø¡ ÙØ²Ø§Ø¦Ø±.", 218 "auth.signinLead": "Ø£ÙÙØ§Ù Ø¨Ø¹ÙØ¯ØªÙ. Ø·ÙØ¨Ø§ØªÙ ÙØ¨ÙØ§ÙØ§ØªÙ اÙÙ ØÙÙØ¸Ø© Ø¨Ø§ÙØªØ¸Ø§Ø±Ù.", 219 "auth.registerLead": "ÙØ§ ÙØ³ØªØºØ±Ù سÙÙ ÙØØ¸Ø©Ø ÙÙØÙØ¸ Ø·ÙØ¨Ø§ØªÙ ÙØ¹ÙاÙÙÙÙ ÙÙÙØ§Ø·Ù ÙÙ Ù ÙØ§Ù ÙØ§ØØ¯.", 220 "auth.whyTitle": "Ù٠اذا ØªÙØ´Ø¦ ØØ³Ø§Ø¨Ø§Ù", 221 "auth.perkOrders": "Ø·ÙØ¨Ø§ØªÙ", 222 "auth.perkOrdersBody": "ÙÙ Ø·ÙØ¨ ÙØØ§ÙØªÙ ÙØªØªØ¨Ø¹Ù ÙÙ ÙØ§Ø¦Ù Ø© ÙØ§ØØ¯Ø©Ø ٠ع إعادة Ø§ÙØ·Ùب بÙÙØ±Ø©.", 223 "auth.perkAddress": "Ø§ÙØ¹ÙاÙÙ٠اÙÙ ØÙÙØ¸Ø©", 224 "auth.perkAddressBody": "Ø£ØªÙ Ù Ø§ÙØ´Ø±Ø§Ø¡ دÙÙ ÙØªØ§Ø¨Ø© عÙÙØ§ÙÙ Ù Ù Ø¬Ø¯ÙØ¯.", 225 "auth.perkInvoices": "اÙÙÙØ§ØªÙر", 226 "auth.perkInvoicesBody": "ØÙ ÙÙ Ø£Ù ÙØ§ØªÙرة أ٠إشعار تسÙÙÙ Ø¨ØµÙØºØ© PDF.", 227 "auth.perkPointsBody": "اج٠ع اÙÙÙØ§Ø· عÙÙ Ù Ø´ØªØ±ÙØ§ØªÙ ÙØ§Ø³ØªØ®Ø¯Ù ÙØ§ Ø¹ÙØ¯ Ø§ÙØ¯Ùع.", 228 "auth.badEmail": "ÙØ°Ø§ ÙØ§ ÙØ¨Ø¯Ù Ø¨Ø±ÙØ¯Ø§Ù Ø¥ÙÙØªØ±ÙÙÙØ§Ù صØÙØØ§Ù.", 229 "auth.badName": "Ø§ÙØ±Ø¬Ø§Ø¡ إدخا٠اس٠Ù.", 230 "auth.badPass": "استخد٠٨ Ø£ØØ±Ù عÙÙ Ø§ÙØ£ÙÙ.", 231 "auth.needPass": "أدخ٠ÙÙÙ Ø© اÙÙ Ø±ÙØ±.", 232 "account.hello": "ØØ³Ø§Ø¨Ù", 233 "account.helloName": "Ù Ø±ØØ¨Ø§Ù", 234 "account.signout": "تسجÙÙ Ø§ÙØ®Ø±Ùج", 235 "account.profile": "Ø¨ÙØ§ÙاتÙ", 236 "account.addresses": "Ø§ÙØ¹ÙاÙÙ٠اÙÙ ØÙÙØ¸Ø©", 237 "account.address": "Ø§ÙØ¹ÙÙØ§Ù", 238 "account.addAddress": "Ø¥Ø¶Ø§ÙØ© عÙÙØ§Ù", 239 "account.noAddress": "ÙØ§ ØªÙØ¬Ø¯ Ø¹ÙØ§ÙÙÙ Ù ØÙÙØ¸Ø© بعد. Ø§ÙØ¹ÙÙØ§Ù Ø§ÙØ°Ù ØªØ³ØªØ®Ø¯Ù Ù Ø¹ÙØ¯ Ø§ÙØ¯Ùع ÙÙØÙØ¸ ÙÙØ§.", 240 "account.default": "Ø§ÙØ§ÙتراضÙ", 241 "account.orders": "Ø§ÙØ·Ùبات Ø§ÙØ£Ø®Ùرة", 242 "account.order": "Ø§ÙØ·Ùب", 243 "account.date": "Ø§ÙØªØ§Ø±ÙØ®", 244 "account.status": "Ø§ÙØØ§ÙØ©", 245 "account.total": "Ø§ÙØ¥Ø¬Ù اÙÙ", 246 "account.view": "عرض", 247 "account.noOrders": "ÙØ§ Ø´ÙØ¡ بعد. Ø³ØªØ¸ÙØ± Ø·ÙØ¨Ø§ØªÙ ÙØªØªØ¨Ø¹Ùا ÙÙØ§.", 248 "account.startShopping": "ابدأ Ø§ÙØªØ³ÙÙ", 249 "account.phone": "رÙÙ Ø§ÙØ¬ÙاÙ", 250 "account.notSet": "ØºÙØ± Ù ØØ¯Ø¯", 251 "account.edit": "تعدÙÙ Ø§ÙØ¨ÙØ§ÙØ§Øª", 252 "account.needSignin": "سجÙÙ Ø§ÙØ¯Ø®ÙÙ ÙØ¹Ø±Ø¶ ØØ³Ø§Ø¨Ù", 253 "account.needSigninBody": "Ø·ÙØ¨Ø§ØªÙ ÙØ¹ÙاÙÙÙ٠اÙÙ ØÙÙØ¸Ø© ÙÙÙØ§Ø·Ù Ù ÙØ¬Ùدة ÙÙØ§.", 254 "loyalty.title": "Ø¨Ø·Ø§ÙØ© اÙÙÙØ§Ø¡", 255 "loyalty.points": "ÙÙØ·Ø©", 256 "loyalty.minimum": "Ø§ÙØØ¯ Ø§ÙØ£Ø¯ÙÙ ÙØ§Ø³ØªØ®Ø¯Ø§Ù ÙÙØ§Ø·Ù", 257 "loyalty.needMore": "اÙÙÙØ§Ø· اÙ٠تبÙÙØ©", 258 "loyalty.ready": "ÙØ¯ÙÙ ÙÙØ§Ø· ÙØ§ÙÙØ© ÙØ§Ø³ØªØ®Ø¯Ø§Ù ÙØ§ Ø¹ÙØ¯ Ø§ÙØ¯Ùع.", 259 "loyalty.collect": "اج٠ع اÙÙÙØ§Ø· عÙÙ Ù٠٠ا تشترÙÙ.", 260 "crumb.home": "Ø§ÙØ±Ø¦ÙØ³ÙØ©", 261 262 "pdp.styleno": "رÙ٠اÙÙ ÙØ¯ÙÙ", 263 "pdp.qty": "اÙÙÙ ÙØ©", 264 "pdp.size": "اÙÙ ÙØ§Ø³", 265 "pdp.length": "Ø§ÙØ·ÙÙ", 266 "pdp.sizeguide": "دÙÙ٠اÙÙ ÙØ§Ø³Ø§Øª", 267 "pdp.addcart": "أض٠إÙÙ Ø§ÙØ³ÙØ©", 268 "pdp.addquote": "أض٠إÙ٠عرض Ø§ÙØ³Ø¹Ø±", 269 "pdp.desc": "اÙÙØµÙ", 270 "pdp.spec": "اÙÙ ÙØ§ØµÙات", 271 "pdp.docs": "اÙÙ Ø³ØªÙØ¯Ø§Øª", 272 "pdp.delivery": "Ø§ÙØªÙصÙÙ ÙØ§Ùإرجاع", 273 "pdp.related": "Ù ÙØªØ¬Ø§Øª ذات ØµÙØ©", 274 "pdp.samesection": "Ù Ù ÙÙØ³ اÙÙØ³Ù ", 275 276 /* ---- contact ---- */ 277 "contact.title": "ØªÙØ§ØµÙ ٠ع ÙØ±ÙÙÙØ§", 278 "contact.call": "Ø§ØªØµÙ Ø¨ÙØ§", 279 "contact.email": "راسÙÙØ§", 280 "contact.hq": "اÙÙ ÙØªØ¨ Ø§ÙØ±Ø¦ÙسÙ", 281 "contact.send": "Ø£Ø±Ø³Ù Ø±Ø³Ø§ÙØ©", 282 "contact.name": "Ø§ÙØ§Ø³Ù اÙÙØ§Ù Ù", 283 "contact.company": "Ø§ÙØ´Ø±ÙØ©", 284 "contact.phone": "اÙÙØ§ØªÙ", 285 "contact.message": "Ø§ÙØ±Ø³Ø§ÙØ©",
286 "contact.submit": "Ø¥Ø±Ø³Ø§Ù Ø§ÙØ·Ùب", 287 "contact.branches": "زر Ø£ØØ¯ اÙÙØ±Ùع", 288 "contact.faq": "Ø£Ø³Ø¦ÙØ© شائعة", 289 290 /* ---- misc ---- */ 291 /* ---- product page trust list (editable content block) ---- */ 292 "trust.delivery": "ØªÙØµÙÙ Ø¯Ø§Ø®Ù Ø§ÙØ¨ØØ±ÙÙ ÙØ´ØÙ Ø¥Ù٠دÙÙ Ø§ÙØ®ÙÙØ¬", 293 "trust.genuine": "بضاعة أصÙÙØ©Ø ØªÙØµØ¯Ø± اÙÙØ§ØªÙرة Ø¨Ø§ÙØ¯ÙÙØ§Ø± Ø§ÙØ¨ØØ±ÙÙÙ Ù Ù Ø³ÙØ§Ùبر", 294 "trust.cr": "Ù ÙØ±Ùد Ù Ø³Ø¬Ù ØªØ¬Ø§Ø±ÙØ§ÙØ ÙØªÙصدر اÙÙØ§ØªÙرة Ø¨Ø§ÙØ¯ÙÙØ§Ø± Ø§ÙØ¨ØØ±ÙÙÙ", 295 "trust.sizing": "ØºÙØ± Ù ØªØ£ÙØ¯ ٠٠اÙÙ ÙØ§Ø³Ø", 296 "trust.ask": "اسأ٠اÙÙØ±ÙÙ", 297 "trust.spec": "ØºÙØ± Ù ØªØ£ÙØ¯ Ø£Ù ÙØ°Ù Ù٠اÙÙ ÙØ§ØµÙØ© اÙÙ ÙØ§Ø³Ø¨Ø©Ø", 298 "trust.askdesk": "Ø§Ø³Ø£Ù ÙØ±ÙÙ Ø§ÙØ³Ùا٠ة", 299 /* ---- size charts ---- */ 300 "size.dontknow": "ÙØ§ ØªØ¹Ø±Ù Ù ÙØ§Ø³ÙØ", 301 "size.brandnote": "اÙÙ ÙØ§Ø³Ø§Øª تختÙ٠بÙÙ Ø§ÙØ¹Ùا٠ات Ø§ÙØªØ¬Ø§Ø±ÙØ© - راجع جدÙÙ", 302 "size.check": "تØÙ٠٠٠اÙÙ ÙØ§Ø³", 303 "size.viewfull": "عرض جدÙ٠اÙÙ ÙØ§Ø³Ø§Øª ÙØ§Ù ÙØ§Ù",
304 "size.close": "Ø¥ØºÙØ§Ù", 305 "size.chart": "جدÙ٠اÙÙ ÙØ§Ø³Ø§Øª", 306 "size.measure": "طرÙÙØ© اÙÙÙØ§Ø³", 307 "size.converted": "Ø§ÙØ³ÙتÙ٠ترات Ù ØÙÙÙØ© Ù Ù ÙÙØ§Ø³Ø§Øª Ø§ÙØ´Ø±ÙØ© اÙ٠صÙÙØ¹Ø© Ø¨Ø§ÙØ¨Ùصة.", 308 "size.convertedIn": "Ø§ÙØ¨Ùصات Ù ØÙÙÙØ© Ù Ù ÙÙØ§Ø³Ø§Øª Ø§ÙØ´Ø±ÙØ© اÙ٠صÙÙØ¹Ø© Ø¨Ø§ÙØ³ÙتÙ٠تر.", 309 "size.nolength": "تØÙÙÙ Ù ÙØ§Ø³Ø§Øª", 310 "fx.note": "Ø§ÙØ£Ø³Ø¹Ø§Ø± Ù ØÙÙÙØ© Ù Ù Ø§ÙØ¯ÙÙØ§Ø± Ø§ÙØ¨ØØ±ÙÙÙ ÙÙØ¹Ø±Ø¶ ÙÙØ·. ØªÙØ«Ø¨ÙÙØª Ø¹Ù ÙØ© Ø§ÙØ·Ùب Ø¹ÙØ¯ Ø¥ØªÙ Ø§Ù Ø§ÙØ´Ø±Ø§Ø¡.", 311 "cart.label": "Ø³ÙØªÙ", 312 "cart.title": "Ø³ÙØ© اÙÙ Ø´ØªØ±ÙØ§Øª", 313 "cart.size": "Ù ÙØ§Ø³", 314 "cart.length": "Ø§ÙØ·ÙÙ", 315 "cart.empty": "Ø³ÙØªÙ ÙØ§Ø±ØºØ©. Ø£Ù Ù ÙØªØ¬ تضÙÙ٠٠٠أ٠٠٠اÙÙØ³Ù ÙÙ Ø³ÙØ¸Ùر ÙÙØ§.", 316 "cart.subtotal": "اÙÙ Ø¬Ù ÙØ¹ اÙÙØ±Ø¹Ù", 317 "cart.note": "ÙÙØØªØ³Ø¨ Ø§ÙØªÙصÙÙ ÙØ£Ø³Ø¹Ø§Ø± Ø§ÙØ¬Ù ÙØ© Ø¹ÙØ¯ Ø¥ØªÙ Ø§Ù Ø§ÙØ´Ø±Ø§Ø¡Ø ÙØªÙثبÙÙØª Ø¹Ù ÙØ© Ø§ÙØ·Ùب Ø¹ÙØ¯ تأÙÙØ¯Ù.", 318 "cart.checkout": "Ø¥ØªÙ Ø§Ù Ø§ÙØ´Ø±Ø§Ø¡", 319 "cart.continue": "٠تابعة Ø§ÙØªØ³ÙÙ", 320 "cart.added": "Ø£ÙØ¶Ù٠إÙÙ Ø§ÙØ³ÙØ©", 321 "cart.quoted": "Ø£ÙØ¶Ù٠إÙÙ Ø·ÙØ¨ عرض Ø§ÙØ³Ø¹Ø±", 322 "cart.soon": "Ø¥ØªÙ Ø§Ù Ø§ÙØ´Ø±Ø§Ø¡ Ù٠اÙ٠رØÙØ© اÙÙØ§Ø¯Ù Ø© Ù Ù Ø§ÙØªØ·ÙÙØ±", 323 "cart.note2": "ØªÙØ·Ø¨ÙÙ٠أسعار Ø§ÙØ¬Ù ÙØ© Ø¹ÙØ¯ Ø¥ØªÙ Ø§Ù Ø§ÙØ´Ø±Ø§Ø¡Ø ÙØªÙثبÙÙØª Ø¹Ù ÙØ© Ø§ÙØ·Ùب Ø¹ÙØ¯ تأÙÙØ¯Ù.", 324 "cart.delivery": "Ø§ÙØªÙصÙÙ", 325 "cart.total": "Ø§ÙØ¥Ø¬Ù اÙÙ", 326 327 /* ---- documentation requests ---- */ 328 "req.title": "Ø·ÙØ¨ اÙÙ Ø³ØªÙØ¯Ø§Øª", 329 "req.sub": "Ù Ø¬Ø§ÙØ§Ù - ÙØ±Ø³ÙÙØ§ Ø¥ÙÙ Ø¨Ø±ÙØ¯Ù Ø§ÙØ¥ÙÙØªØ±ÙÙÙØ عادة٠ÙÙ ÙÙØ³ ÙÙÙ Ø§ÙØ¹Ù Ù.", 330 "req.which": "٠ا اÙÙ Ø³ØªÙØ¯Ø§Øª Ø§ÙØªÙ ØªØØªØ§Ø¬ÙاØ", 331 "req.name": "Ø§ÙØ§Ø³Ù ", 332 "req.email": "Ø§ÙØ¨Ø±Ùد Ø§ÙØ¥ÙÙØªØ±ÙÙÙ", 333 "req.privacy": "ÙØ³ØªØ®Ø¯Ù ÙØ°Ù Ø§ÙØ¨ÙØ§ÙØ§Øª ÙÙØ· ÙØ¥Ø±Ø³Ø§Ù اÙÙ Ø³ØªÙØ¯Ø§Øª ÙØ§ÙØ§ØØªÙاظ Ø¨Ø³Ø¬Ù ÙØ·ÙبÙ.", 334 "req.send": "Ø¥Ø±Ø³Ø§Ù Ø§ÙØ·Ùب", 335 "req.sending": "Ø¬Ø§Ø±Ù Ø§ÙØ¥Ø±Ø³Ø§Ù...", 336 "req.thanks": "ØªÙ Ø§Ø³ØªÙØ§Ù Ø·ÙØ¨Ù", 337 "req.okbody": "Ø³ÙØ±Ø³Ù ÙØ±ÙÙ Ø§ÙØ³Ùا٠ة اÙÙ Ø³ØªÙØ¯Ø§Øª Ø¥ÙÙ", 338 "req.mailopen": "Ø®Ø·ÙØ© Ø£Ø®ÙØ±Ø© - اضغط إرسا٠ÙÙ Ø¨Ø±ÙØ¯Ù", 339 "req.mailbody": "ÙÙØªØ تطبÙÙ Ø§ÙØ¨Ø±Ùد ÙÙÙÙ ØªÙØ§ØµÙÙ Ø§ÙØ·Ùب. أرسÙÙ ÙØ³Ùرد ÙØ±ÙÙ Ø§ÙØ³Ùا٠ة عÙÙ", 340 "req.noapp": "ÙÙ ÙÙÙØªØ تطبÙÙ Ø§ÙØ¨Ø±ÙØ¯Ø Ø±Ø§Ø³ÙÙØ§ عÙÙ", 341 "req.close": "Ø¥ØºÙØ§Ù", 342 "req.errdoc": "اختر Ù Ø³ØªÙØ¯Ø§Ù ÙØ§ØØ¯Ø§Ù عÙÙ Ø§ÙØ£ÙÙ.", 343 "req.errname": "ÙØ±Ø¬Ù إدخا٠اس٠Ù.", 344 "req.erremail": "ÙØ±Ø¬Ù Ø¥Ø¯Ø®Ø§Ù Ø¨Ø±ÙØ¯ Ø¥ÙÙØªØ±ÙÙ٠صØÙØ.", 345 "req.errsend": "ÙÙ ÙØªÙ Ø§ÙØ¥Ø±Ø³Ø§Ù. ØØ§Ù٠٠رة أخر٠أ٠راسÙÙØ§ عبر Ø§ÙØ¨Ø±Ùد.", 346 347 /* ---- shipping ---- */ 348 "ship.to": "Ø§ÙØªÙصÙ٠إÙÙ", 349 "ship.free": "Ù Ø¬Ø§ÙØ§Ù", 350 "ship.quoted": "ÙÙØ³Ø¹ÙÙØ± بعد Ø§ÙØ·Ùب", 351 "ship.freight": "Ø§ÙØ´ØÙ", 352 "ship.freeover": "Ù Ø¬Ø§ÙØ§Ù ÙÙØ·Ùبات ÙÙÙ", 353 "ship.addmore": "أضÙ", 354 "ship.forfree": "ÙÙØØµÙÙ Ù Ø¬Ø§ÙØ§Ù عÙÙ", 355 "ship.arrives": "ÙØµÙ", 356 "ship.sameday": "ÙÙ ÙÙØ³ اÙÙÙÙ ", 357 "ship.items": "ÙØ·Ø¹", 358 "ship.oneitem": "ÙØ·Ø¹Ø© ÙØ§ØØ¯Ø©", 359 "ship.none": "ÙØ§ ÙÙØµÙ٠إÙÙ ÙØ°Ù اÙÙØ¬ÙØ© عبر اÙÙ ÙÙØ¹ بعد - ØªÙØ§ØµÙ Ù Ø¹ÙØ§ ÙØ³ÙØ±ØªÙØ¨ ذÙÙ.", 360 "search.placeholder": "Ø§Ø¨ØØ« Ø¨Ø§ÙØ§Ø³Ù أ٠اÙÙØµÙ أ٠رÙ٠اÙÙ ÙØ¯ÙÙ", 361 "search.hint": "Ø§ÙØªØ¨ ØØ±ÙÙ٠عÙÙ Ø§ÙØ£ÙÙ. ÙØ´Ù Ù Ø§ÙØ¨ØØ« اس٠اÙÙ ÙØªØ¬ ÙÙØµÙÙ ÙØ±Ù٠اÙÙ ÙØ¯ÙÙ.", 362 "search.none": "ÙØ§ ØªÙØ¬Ø¯ ÙØªØ§Ø¦Ø¬ ÙÙ", 363 "search.ask": "ÙÙÙÙØ± Ù ÙØªØ¬Ø§Øª ٠٠خارج اÙ٠خزÙÙ Ø£Ø³Ø¨ÙØ¹Ùا٠- ØªÙØ§ØµÙ Ù Ø¹ÙØ§.", 364 "search.shown": "Ù Ù Ø£ÙØ±Ø¨ اÙÙØªØ§Ø¦Ø¬", 365 /* ---- live store: checkout, orders, accounts ---- */ 366 "nav.myAccount": "ØØ³Ø§Ø¨Ù", 367 "checkout.title": "Ø¥ØªÙ Ø§Ù Ø§ÙØ·Ùب", 368 "checkout.loading": "جار٠تØÙ ÙÙ Ø³ÙØªÙ...", 369 "order.title": "Ø·ÙØ¨Ù", 370 "order.loading": "جار٠تØÙ ÙÙ Ø·ÙØ¨Ù...", 371 "checkout.empty": "Ø³ÙØªÙ ÙØ§Ø±ØºØ©", 372 "checkout.emptyIssues": "اÙÙ ÙØªØ¬Ø§Øª Ø§ÙØªÙ ÙØ§Ùت ÙÙÙØ§ Ù٠تعد ٠تÙÙØ±Ø©.", 373 "checkout.retry": "ØØ§Ù٠٠رة أخرÙ", 374 "checkout.signedInAs": "٠سجÙÙ Ø§ÙØ¯Ø®Ù٠باس٠", 375 "checkout.haveAccount": "ÙØ¯ÙÙ ØØ³Ø§Ø¨Ø", 376 "checkout.orGuest": "ÙØ¹ÙاÙÙÙ٠اÙÙ ØÙÙØ¸Ø© ÙÙÙØ§Ø·Ù - أ٠تابع ÙØ¶ÙÙ.", 377 "checkout.contact": "Ø¨ÙØ§ÙاتÙ", 378 "account.company": "Ø§ÙØ´Ø±ÙØ©", 379 "checkout.newAddress": "عÙÙØ§Ù Ø¬Ø¯ÙØ¯", 380 "checkout.line1": "اÙ٠بÙÙ ÙØ§ÙطرÙÙ ÙØ§Ù٠ج٠ع", 381 "checkout.line2": "Ø§ÙØ´ÙØ© أ٠اÙÙ ÙØªØ¨ أ٠٠عÙÙ ÙØ±Ùب", 382 "checkout.city": "اÙ٠دÙÙØ© أ٠اÙÙ ÙØ·ÙØ©", 383 "checkout.postcode": "Ø§ÙØ±Ù ز Ø§ÙØ¨Ø±ÙدÙ", 384 "checkout.saveAddress": "اØÙظ ÙØ°Ø§ Ø§ÙØ¹ÙÙØ§Ù ÙÙ ØØ³Ø§Ø¨Ù", 385 "checkout.delivery": "عÙÙØ§Ù Ø§ÙØªÙصÙÙ", 386 "checkout.country": "Ø§ÙØ¯ÙÙØ©", 387 "checkout.method": "طرÙÙØ© Ø§ÙØªÙصÙÙ", 388 "checkout.usePoints": "استخد٠ÙÙØ§Ø·Ù", 389 "checkout.nothingToPay": "ÙÙØ§Ø·Ù ØªØºØ·Ù ÙØ°Ø§ Ø§ÙØ·Ùب - ÙØ§ ÙÙØ¬Ø¯ Ù Ø¨ÙØº ٠ستØÙ.", 390 "checkout.noPayment": "Ø§ÙØ¯Ùع Ø§ÙØ¥ÙÙØªØ±ÙÙÙ ØºÙØ± Ù ØªØ§Ø ÙÙØ°Ø§ Ø§ÙØ·Ùب. ÙØ±Ø¬Ù Ø§ÙØªÙØ§ØµÙ Ù Ø¹ÙØ§ ÙØ¥ØªÙ ا٠Ù.", 391 "checkout.payment": "Ø§ÙØ¯Ùع", 392 "checkout.note": "Ù ÙØ§ØØ¸Ø§Øª Ø§ÙØ·Ùب", 393 "checkout.notePh": "تعÙÙ٠ات Ø§ÙØªÙصÙÙØ رÙ٠أ٠ر Ø§ÙØ´Ø±Ø§Ø¡Ø ٠سؤÙ٠اÙÙ ÙÙØ¹...", 394 "checkout.placeQuote": "Ø£Ø±Ø³Ù Ø§ÙØ·Ùب - Ø§ÙØ¯Ùع بعد تأÙÙØ¯ Ø§ÙØ´ØÙ", 395 "checkout.payNow": "Ø§Ø¯ÙØ¹ بأ٠اÙ", 396 "checkout.place": "Ø£Ø±Ø³Ù Ø§ÙØ·Ùب", 397 "checkout.summary": "Ø·ÙØ¨Ù", 398 "checkout.pointsDiscount": "اÙÙÙØ§Ø·", 399 "order.payTabby": "Ø§Ø¯ÙØ¹ ٠ع تابÙ", 400 "order.choosePay": "اختر طرÙÙØ© Ø§ÙØ¯Ùع:", 401 "order.payCard": "Ø¨Ø·Ø§ÙØ© أ٠بÙÙØª Ø£Ù Apple Pay", 402 "order.payTabby4": "ÙØ³ÙÙ ÙØ§ عÙÙ 4 Ø¯ÙØ¹Ø§Øª ٠ع تابÙ", 403 "checkout.couponCovers": "اÙÙØ³ÙÙ Ø© ØªØºØ·Ù ÙØ°Ø§ Ø§ÙØ·Ùب - ÙØ§ ÙÙØ¬Ø¯ Ù Ø¨ÙØº ٠ستØÙ.", 404 "coupon.title": "ÙØ³ÙÙ Ø© خص٠", 405 "coupon.row": "ÙØ³ÙÙ Ø©", 406 "coupon.placeholder": "ر٠ز اÙÙØ³ÙÙ Ø©", 407 "coupon.apply": "تطبÙÙ", 408 "coupon.remove": "Ø¥Ø²Ø§ÙØ© اÙÙØ³ÙÙ Ø©", 409 "coupon.yours": "ÙØ³Ø§Ø¦Ù Ù", 410 "coupon.use": "تطبÙÙ", 411 "coupon.switch": "Ø§Ø³ØªØ®Ø¯Ù ÙØ§ Ø¨Ø¯ÙØ§Ù Ù ÙÙØ§", 412 "coupon.off": "خص٠", 413 "coupon.on": "عÙÙ", 414 "coupon.upTo": "ØØªÙ", 415 "coupon.min": "Ø¹ÙØ¯ Ø§ÙØ´Ø±Ø§Ø¡ بÙ", 416 "coupon.notSale": "ÙØ§ تش٠٠اÙÙ ÙØªØ¬Ø§Øª اÙÙ Ø®ÙÙØ¶Ø©", 417 "coupon.until": "ØØªÙ", 418 "coupon.mine": "ÙØ³Ø§Ø¦Ù Ù", 419 "coupon.applied": "٠طبÙÙØ© عÙÙ Ø³ÙØªÙ", 420 "coupon.openCart": "Ø§ÙØªØ Ø§ÙØ³ÙØ©", 421 "coupon.useNow": "Ø§Ø³ØªØ®Ø¯Ù ÙØ§ Ø§ÙØ¢Ù", 422 "coupon.saved": "ت٠تطبÙ٠اÙÙØ³ÙÙ Ø© - Ø³ØªÙØ®ØµÙ Ø¹ÙØ¯ Ø§ÙØ¯Ùع.", 423 "checkout.vatIncl": "Ø´Ø§Ù Ù Ø¶Ø±ÙØ¨Ø© اÙÙÙÙ Ø© اÙÙ Ø¶Ø§ÙØ©", 424 "checkout.vatAbroad": "ÙØ§ ØªÙØ·Ø¨ÙÙÙ Ø¶Ø±ÙØ¨Ø© اÙÙÙÙ Ø© اÙÙ Ø¶Ø§ÙØ© Ø§ÙØ¨ØØ±ÙÙÙØ© عÙÙ Ø§ÙØ·Ùبات خارج Ø§ÙØ¨ØØ±ÙÙ - Ø§ÙØ£Ø³Ø¹Ø§Ø± Ù Ø¹Ø±ÙØ¶Ø© بدÙÙÙØ§.", 425 "checkout.fx": "ÙØªÙ Ø§ÙØ®ØµÙ Ø¨Ø§ÙØ¯ÙÙØ§Ø± Ø§ÙØ¨ØØ±ÙÙÙ:", 426 "checkout.chargedIn": "Ø³ÙØªÙ Ø§ÙØ®ØµÙ Ø¨Ø¹Ù ÙØ©", 427 "checkout.freightNote": "ÙØØ¯Ø¯ ÙØ±ÙÙÙØ§ تÙÙÙØ© Ø´ØÙ ÙØ°Ø§ Ø§ÙØ·Ùب. ÙØ±Ø³Ù ÙÙ Ø§ÙØ¥Ø¬Ù اÙ٠اÙÙÙØ§Ø¦Ù ÙØ±Ø§Ø¨Ø· Ø§ÙØ¯Ùع عبر Ø§ÙØ¨Ø±Ùد - ÙØ§ ÙØªÙ Ø®ØµÙ Ø£Ù Ù Ø¨ÙØº Ø§ÙØ¢Ù.", 428 "checkout.terms": "Ø¨Ø¥Ø±Ø³Ø§Ù Ø§ÙØ·Ùب ÙØ¥ÙÙ ØªÙØ§Ù٠عÙÙ Ø´Ø±ÙØ· Ø§ÙØ¨Ùع. Ø§ÙØ£Ø³Ø¹Ø§Ø± ØªØ´Ù Ù Ø¶Ø±ÙØ¨Ø© اÙÙÙÙ Ø© اÙÙ Ø¶Ø§ÙØ© ØÙث٠ا ØªÙØ·Ø¨Ù.", 429 "checkout.secure": "ØªÙØ¯Ø®Ù Ø¨ÙØ§Ùات Ø§ÙØ¨Ø·Ø§ÙØ© ÙÙ ØµÙØØ© Tap Ø§ÙØ¢Ù ÙØ© - ÙØ§ ÙØ±Ø§Ùا ÙÙØ§ ÙØØªÙØ¸ Ø¨ÙØ§.", 430 "order.thanks": "Ø´ÙØ±Ø§Ù ÙÙ - ت٠تأÙÙØ¯ Ø·ÙØ¨Ù", 431 "order.emailed": "أرسÙÙØ§ تأÙÙØ¯Ø§Ù Ø¥ÙÙ", 432 "order.payFailed": "Ù٠تت٠ع٠ÙÙØ© Ø§ÙØ¯Ùع", 433 "order.payFailedBody": "ÙÙ ÙØªÙ Ø®ØµÙ Ø£Ù Ù Ø¨ÙØº. Ø·ÙØ¨Ù Ù ØÙÙØ¸ - ÙÙ ÙÙ٠اÙÙ ØØ§ÙÙØ© ٠رة Ø£Ø®Ø±Ù Ø£Ø¯ÙØ§Ù Ø¨Ø§ÙØ¨Ø·Ø§ÙØ© ÙÙØ³Ùا أ٠بأخرÙ.", 434 "order.received": "Ø´ÙØ±Ø§Ù ÙÙ - استÙÙ ÙØ§ Ø·ÙØ¨Ù", 435 "order.order": "Ø§ÙØ·Ùب", 436 "order.amountDue": "اÙÙ Ø¨ÙØº اÙ٠ستØÙ", 437 "order.heldUntil": "Ù ÙØªØ¬Ø§ØªÙ Ù ØØ¬Ùزة ÙÙ ØØªÙ", 438 "order.tryAgain": "أعد Ù ØØ§ÙÙØ© Ø§ÙØ¯Ùع", 439 "order.payNow": "Ø§Ø¯ÙØ¹ Ø§ÙØ¢Ù", 440 "order.items": "اÙÙ ÙØªØ¬Ø§Øª", 441 "order.refunded": "اÙÙ Ø¨ÙØº اÙ٠سترد", 442 "order.details": "ØªÙØ§ØµÙÙ Ø§ÙØ·Ùب", 443 "order.tracking": "رÙÙ Ø§ÙØªØªØ¨Ø¹", 444 "order.trackSmsa": "ØªØªØ¨ÙØ¹ Ø§ÙØ´ØÙØ© ÙØ¯Ù SMSA", 445 "account.track": "ØªØªØ¨ÙØ¹", 446 "account.trackingNo": "رÙÙ Ø§ÙØªØªØ¨Ø¹", 447 "account.trackTitle": "ØªØªØ¨ÙØ¹ Ø·ÙØ¨Ù", 448 "account.trackHelp": "أدخ٠رÙÙ Ø§ÙØªØªØ¨Ø¹ Ù Ù Ø±Ø³Ø§ÙØ© Ø§ÙØ´ØÙ. ÙØµÙ٠بعد ØØ¬Ø² Ø´ØÙØ© Ø·ÙØ¨Ù ÙØ¯Ù SMSA.", 449 "account.trackNumber": "رÙÙ Ø§ÙØªØªØ¨Ø¹", 450 "account.trackGo": "ØªØªØ¨ÙØ¹", 451 "account.trackNone": "ÙØ§ ØªÙØ¬Ø¯ ØØ±ÙØ© بعد - Ø³ØªÙ Ø³Ø SMSA Ø§ÙØ·Ø±Ø¯ Ø¹ÙØ¯ Ø§Ø³ØªÙØ§Ù Ù.", 452 "account.trackSmsa": "Ø¹Ø±Ø¶ÙØ§ عÙÙ Ù ÙÙØ¹ SMSA", 453 "account.trackEmpty": "أدخ٠رÙÙ Ø§ÙØªØªØ¨Ø¹.", 454 "order.help": "ÙØ¯ÙÙ Ø³Ø¤Ø§Ù Ø¹Ù ÙØ°Ø§ Ø§ÙØ·ÙØ¨Ø Ø§ØªØµÙ Ø¨ÙØ§ أ٠رد عÙÙ Ø±Ø³Ø§ÙØ© Ø§ÙØªØ£ÙÙØ¯ ٠ع Ø°ÙØ± رÙÙ Ø§ÙØ·Ùب.", 455 "order.notFound": "ÙÙ ÙØªÙ ÙÙ Ù Ù Ø§ÙØ¹Ø«Ùر عÙÙ ÙØ°Ø§ Ø§ÙØ·Ùب.", 456 "account.loading": "جار٠تØÙ ÙÙ ØØ³Ø§Ø¨Ù...", 457 "account.verifiedOk": "Ø´ÙØ±Ø§Ù ÙÙ - ت٠تأÙÙØ¯ Ø¨Ø±ÙØ¯Ù Ø§ÙØ¥ÙÙØªØ±ÙÙÙ.", 458 "account.verifyBad": "Ø§ÙØªÙت ØµÙØ§ØÙØ© رابط Ø§ÙØªØ£ÙÙØ¯ Ø£Ù ØªÙ Ø§Ø³ØªØ®Ø¯Ø§Ù Ù Ù Ù ÙØ¨Ù.", 459 "account.resend": "Ø£Ø±Ø³Ù Ø±Ø§Ø¨Ø·Ø§Ù Ø¬Ø¯ÙØ¯Ø§Ù", 460 "account.resent": "أرسÙÙØ§ رابط تأÙÙØ¯ Ø¬Ø¯ÙØ¯Ø§Ù. تØÙÙ Ù Ù Ø¨Ø±ÙØ¯Ù.", 461 "account.unverified": "ÙØ±Ø¬Ù تأÙÙØ¯ Ø¨Ø±ÙØ¯Ù Ø§ÙØ¥ÙÙØªØ±ÙÙÙ - أرسÙÙØ§ ÙÙ Ø±Ø§Ø¨Ø·Ø§Ù Ø¹ÙØ¯ Ø§ÙØªØ³Ø¬ÙÙ.", 462 "account.save": "ØÙظ", 463 "account.cancel": "Ø¥ÙØºØ§Ø¡", 464 "account.changePassword": "تغÙÙØ± ÙÙÙ Ø© اÙÙ Ø±ÙØ±", 465 "account.currentPassword": "ÙÙÙ Ø© اÙÙ Ø±ÙØ± Ø§ÙØØ§ÙÙØ©", 466 "auth.newPassword": "ÙÙÙ Ø© اÙÙ Ø±ÙØ± Ø§ÙØ¬Ø¯Ùدة", 467 "account.makeDefault": "اجعÙÙ Ø§ÙØ§ÙتراضÙ", 468 "account.remove": "ØØ°Ù", 469 "account.removeAsk": "ÙÙ ØªØ±ÙØ¯ ØØ°Ù ÙØ°Ø§ Ø§ÙØ¹ÙÙØ§ÙØ", 470 "account.saved": "ت٠ØÙظ Ø¨ÙØ§ÙاتÙ.", 471 "account.passwordSaved": "ت٠تغÙÙØ± ÙÙÙ Ø© اÙÙ Ø±ÙØ± ÙØªØ³Ø¬ÙÙ Ø§ÙØ®Ø±Ùج Ù Ù Ø§ÙØ£Ø¬Ùزة Ø§ÙØ£Ø®Ø±Ù.", 472 "auth.newPassTitle": "اختر ÙÙÙ Ø© Ù Ø±ÙØ± Ø¬Ø¯ÙØ¯Ø©", 473 "auth.newPassLead": "اختر ÙÙÙ Ø© Ù Ø±ÙØ± ÙÙ ØªØ³ØªØ®Ø¯Ù ÙØ§ ÙÙØ§ Ù Ù ÙØ¨Ù. Ø³ØªÙØ³Ø¬ÙÙ٠دخÙÙ٠٠باشرة بعد ذÙÙ.", 474 "auth.savePassword": "اØÙظ ÙØ³Ø¬ÙÙ Ø§ÙØ¯Ø®ÙÙ", 475 "brands.none": "ØªØ¸ÙØ± Ø§ÙØ¹Ùا٠ات Ø§ÙØªØ¬Ø§Ø±ÙØ© ÙÙØ§ Ø¹ÙØ¯ Ø¥Ø¶Ø§ÙØ© اÙÙ ÙØªØ¬Ø§Øª.", 476 "brands.product": "Ù ÙØªØ¬", 477 "brands.products": "Ù ÙØªØ¬Ø§Øª", 478 "checkout.secureTabby": "تÙÙÙ Ù Ø§ÙØ¯Ùع عÙÙ ØµÙØØ© ØªØ§Ø¨Ù Ø§ÙØ¢Ù ÙØ©.", 479 "size.nocharts": "Ù٠تÙÙØ´Ø± جداÙÙ Ù ÙØ§Ø³Ø§Øª بعد.", 480 "size.none": "ÙØ§ ÙÙØ¬Ø¯ جدÙÙ Ù ÙØ§Ø³Ø§Øª Ù ÙØ´Ùر ÙÙØ°Ù Ø§ÙØ¹Ùا٠ة بعد. اسأÙÙØ§ ÙØ³ÙØ¤ÙØ¯ Ù٠اÙÙ ÙØ§Ø³ ÙØ¨Ù Ø§ÙØ·Ùب.", 481 "size.sub": "اÙÙÙØ§Ø³Ø§Øª Ù Ù Ø§ÙØ´Ø±ÙØ© اÙ٠صÙÙØ¹Ø© ÙÙØ³Ùا. ÙÙ ÙÙÙ Ø§ÙØªØ¨Ø¯Ù٠بÙÙ Ø§ÙØ¨Ùصة ÙØ§ÙØ³ÙØªÙ٠تر.", 482 "api.offline": "ÙØ°Ù ÙØ³Ø®Ø© ٠عاÙÙØ© - اÙ٠تجر ØºÙØ± ٠تصÙ.", 483 "api.failed": "ÙÙ ØªØªÙ Ø§ÙØ¹Ù ÙÙØ©. ÙØ±Ø¬Ù اÙÙ ØØ§ÙÙØ© ٠رة أخرÙ.", 484 "api.network": "تعذر اÙÙØµÙ٠إÙ٠اÙ٠تجر. تØÙ٠٠٠اتصاÙÙ ÙØØ§Ù٠٠رة أخرÙ." 485 }; 486 487 /* ---------------------------------------------------------------- phrases 488 Everything else on the page - text written straight into the HTML or put 489 there by a script - is translated by its English wording: 490 window.SNIPER_PHRASES the built-in Arabic (shared/js/i18n-phrases.js) 491 window.SNIPER_I18N what was changed in Admin > Translations (from 492 business-data.js): { ar: {text: arabic}, en: 493 {text: english wording}, defaultLang } 494 A key above ("nav.home") can be changed from the admin the same way. 495 Numbers in a phrase are placeholders - "Showing 12 of 40" is looked up as 496 "Showing {0} of {1}" - and go back in wrapped as left-to-right runs, so 497 prices, quantities and phone numbers never reverse in Arabic.
498 Text still in English on the Arabic site is reported (a handful at a time) 499 to Admin > Translations > Missing, so it can be translated there. */ 500 var O = window.SNIPER_I18N || {}; 501 var OAR = O.ar || {}, OEN = O.en || {}; 502 var PH = window.SNIPER_PHRASES || {}; 503 Object.keys(OAR).forEach(function (k) { if (/^[a-z0-9]+(\.[a-zA-Z0-9]+)+$/.test(k)) AR[k] = OAR[k]; }); 504 var HAS = Object.prototype.hasOwnProperty; 505 var LRI = "\u2066", PDI = "\u2069"; 506 507 var lang = "en"; 508 try { 509 var q = new URLSearchParams(location.search).get("lang"); 510 var saved = localStorage.getItem(KEY); 511 if (q === "ar" || q === "en") lang = q; 512 else if (saved === "ar" || saved === "en") lang = saved; 513 else if (O.defaultLang === "ar") lang = "ar"; 514 } catch (err) { /* ignore */ } 515 516 /* Values that change from the admin rather than from the language - the 517 free-delivery threshold is the one that matters - are written into the 518 strings as {amount} and filled in here. Both languages take the same 519 value, so a number set once in the config is correct in both. The value 520 may carry markup (the threshold arrives as a <b data-bhd> the currency 521 switcher rewrites), so it is filled in after escaping, never before. */ 522 function fill(s) { 523 var V = window.SNIPER_I18N_VARS; 524 if (!V || s == null || String(s).indexOf("{") === -1) return s; 525 return String(s).replace(/\{(\w+)\}/g, function (m, k) { 526 return V[k] != null ? V[k] : m; 527 }); 528 } 529 530 function t(key, fallback) { 531 if (lang === "ar" && AR[key]) return AR[key]; 532 if (lang === "en" && HAS.call(OEN, key)) return OEN[key]; 533 return fallback; 534 } 535 536 /* Phone numbers must stay left-to-right even in Arabic: the bidi algorithm 537 otherwise reorders the groups and throws the + to the far end, so 538 "+973 1723 2066" renders as "2066 1723 973+". Wrapping just the number in 539 a <bdi dir="ltr"> isolates it. Only text nodes carrying digits are touched - 540 icons and everything else in the link are left exactly where they were. */ 541 function isolatePhones() { 542 document.querySelectorAll('a[href^="tel:"]').forEach(function (a) { 543 if (a.dataset.telWrapped) return; 544 a.dataset.telWrapped = "1"; 545 Array.prototype.slice.call(a.childNodes).forEach(function (n) { 546 if (n.nodeType === 3 && /\d/.test(n.nodeValue)) { 547 var b = document.createElement("bdi"); 548 b.setAttribute("dir", "ltr"); 549 b.textContent = n.nodeValue; 550 a.replaceChild(b, n); 551 } 552 }); 553 }); 554 } 555 556 /* ------------------------------------------------ the phrase pass */ 557 var hasEn = Object.keys(OEN).length > 0; 558 var ORIG = new WeakMap(), WROTE = new WeakMap(), ATTR_ORIG = new WeakMap(); 559 var ATTRS = ["placeholder", "title", "aria-label", "alt"]; 560 var SKIP = "script,style,noscript,textarea,code,pre,[data-i18n],[data-noi18n],[contenteditable]"; 561 /* product data - names, brands, descriptions - is the catalogue's, not the interface's */ 562 var DATA_ZONE = ".prod__name,.prod__brand,#bbName,.buybox__brand,#pDesc,#pSpec,.pdp__desc,.cline__name,.co__lname,.brand-strip,[data-product-name],.gallery,.srch__name,.card-title,.legal__doc,[data-contact],.footer__contact,.topbar__contact"; 563 var NUM = /\+?\d(?:[\d.,:\/-]*\d)?(?:\s\d(?:[\d.,:\/-]*\d)?)*/g; 564 565 function norm(s) { return s.replace(/[\s ]+/g, " ").trim(); } 566 function lookup(s) { 567 if (lang === "ar") { 568 if (HAS.call(OAR, s)) return OAR[s]; 569 if (HAS.call(PH, s)) return PH[s]; 570 } else if (HAS.call(OEN, s)) return OEN[s]; 571 return null; 572 } 573 function iso(v) { return LRI + v + PDI; } 574 function translate(raw, report) { 575 var s = norm(raw); 576 if (!s) return null; 577 if (!/[A-Za-z]/.test(s)) { 578 /* a bare number with gaps in it (a phone number) must not reverse */ 579 return lang === "ar" && /\d\s+\d/.test(s) && s.indexOf(LRI) === -1 ? iso(s) : null; 580 } 581 var hit = lookup(s); 582 if (hit != null) return hit; 583 if (/\d/.test(s)) { 584 var nums = [], i = 0; 585 var tpl = s.replace(NUM, function (m) { nums.push(m); return "{" + (i++) + "}"; }); 586 hit = lookup(tpl); 587 if (hit != null) { 588 return hit.replace(/\{(\d+)\}/g, function (m, k) { return nums[k] != null ? (lang === "ar" ? iso(nums[k]) : nums[k]) : m; }); 589 } 590 if (report) miss(tpl); 591 } else if (report) miss(s); 592 return null; 593 } 594 function textNode(n) { 595 var el = n.parentElement; 596 if (!el || el.closest(SKIP)) return; 597 var cur = n.nodeValue; 598 if (WROTE.get(n) !== cur) ORIG.set(n, cur); // new wording from a script 599 var en = ORIG.get(n); 600 if (en == null || !/\S/.test(en)) return; 601 var out = null; 602 if (lang === "ar" || hasEn) out = translate(en, lang === "ar" && !el.closest(DATA_ZONE)); 603 var lead = en.match(/^\s*/)[0], trail = en.match(/\s*$/)[0]; 604 /* English that stays English on the Arabic page (a brand, a standard, the 605 company name, an address) keeps its own left-to-right order: without this 606 "EN ISO 20345" shows as "20345 EN ISO" and a closing full stop jumps to 607 the front */ 608 if (lang === "ar") { 609 var body = out == null ? norm(en) : out; 610 if (/[A-Za-z]/.test(body) && /[\s\d.]/.test(body) && !/[\u0600-\u06FF]/.test(body) && body.indexOf(LRI) !== 0) out = iso(body.replace(/[\u2066\u2069]/g, "")); 611 } 612 var next = out == null ? en : lead + out + trail; 613 if (next !== cur) { WROTE.set(n, next); n.nodeValue = next; } 614 else WROTE.set(n, cur); 615 } 616 function attrs(el) { 617 if (el.closest(SKIP)) return; 618 var store = ATTR_ORIG.get(el); 619 ATTRS.forEach(function (a) { 620 if (!el.hasAttribute(a)) return; 621 var v = el.getAttribute(a); 622 if (!store) { store = {}; ATTR_ORIG.set(el, store); } 623 var rec = store[a]; 624 if (!rec || rec.wrote !== v) rec = store[a] = { en: v, wrote: null }; 625 var out = (lang === "ar" || hasEn) ? translate(rec.en, false) : null; 626 var next = out == null ? rec.en : out; 627 rec.wrote = next; 628 if (next !== v) el.setAttribute(a, next); 629 }); 630 } 631 /* a data-i18n element a script adds after the page loaded (the cart drawer) */ 632 function keyEl(n) { 633 if (n.getAttribute("data-i18n-lang") === lang) return; 634 var key = n.getAttribute("data-i18n"); 635 if (!n.dataset.en) n.dataset.en = n.innerHTML; 636 var next = fill(lang === "ar" ? (AR[key] || n.dataset.en) : (HAS.c
636all(OEN, key) ? OEN[key] : n.dataset.en)); 637 n.setAttribute("data-i18n-lang", lang); 638 if (n.innerHTML !== next) n.innerHTML = next; 639 } 640 var busy = false; 641 function phrasePass(root) { 642 if (!root || (lang !== "ar" && !hasEn && !touched)) return; 643 touched = touched || lang === "ar"; 644 busy = true; 645 if (root.nodeType === 1 && root !== document.body) { 646 if (root.hasAttribute("data-i18n")) keyEl(root); 647 root.querySelectorAll("[data-i18n]").forEach(keyEl); 648 } 649 if (root.nodeType === 3) textNode(root); 650 else if (root.nodeType === 1) { 651 attrs(root); 652 var w = document.createTreeWalker(root, NodeFilter.SHOW_TEXT | NodeFilter.SHOW_ELEMENT), n; 653 while ((n = w.nextNode())) { if (n.nodeType === 3) textNode(n); else attrs(n); } 654 } 655 busy = false; 656 } 657 var touched = false, observer = null; 658 function onMutate(list) { 659 if (busy) return; 660 list.forEach(function (m) { 661 if (m.type === "characterData") phrasePass(m.target); 662 else if (m.type === "attributes") { busy = true; attrs(m.target); busy = false; } 663 else m.addedNodes.forEach(phrasePass); 664 }); 665 } 666 var TITLE0 = null; 667 function translateTitle() { 668 if (TITLE0 == null || (document.title !== TITLE0.wrote)) TITLE0 = { en: document.title, wrote: null }; 669 var parts = TITLE0.en.split(" | ").map(function (p) { var o = (lang === "ar" || hasEn) ? translate(p, false) : null; return o == null ? p : o.replace(/[â¦â©]/g, ""); }); 670 TITLE0.wrote = parts.join(" | "); 671 document.title = TITLE0.wrote; 672 } 673 674 /* English text left on the Arabic site goes to Admin > Translations */ 675 var MISS = {}, missT = null, missN = 0; 676 function miss(s) { 677 if (s.length > 280 || /@|https?:|www\./.test(s) || !/[A-Za-z]{3,}/.test(s)) return; 678 if (HAS.call(MISS, s) || missN >= 60) return; 679 MISS[s] = 1; missN++; 680 clearTimeout(missT); 681 missT = setTimeout(sendMissing, 4000); 682 } 683 function sendMissing() { 684 var seen = {}; 685 try { seen = JSON.parse(sessionStorage.getItem("sniper.i18n.sent") || "{}"); } catch (e) { /* ignore */ } 686 var list = Object.keys(MISS).filter(function (s) { return !seen[s]; }); 687 MISS = {}; 688 if (!list.length || !window.fetch || /^file:/.test(location.protocol)) return; 689 list.forEach(function (s) { seen[s] = 1; }); 690 try { sessionStorage.setItem("sniper.i18n.sent", JSON.stringify(seen)); } catch (e) { /* ignore */ } 691 var body = JSON.stringify({ page: location.pathname, strings: list.slice(0, 60) }); 692 try { 693 if (navigator.sendBeacon) navigator.sendBeacon("/api/i18n/missing", new Blob([body], { type: "text/plain" })); 694 else fetch("/api/i18n/missing", { method: "POST", body: body, headers: { "Content-Type": "text/plain" }, keepalive: true }); 695 } catch (e) { /* ignore */ } 696 } 697 698 /* Product names and descriptions: the catalogue carries the Arabic as 699 nameAr / descAr / shortAr (Products > a product, or Translations > Products). In 700 Arabic each product's name and description are swapped for them as the 701 catalogue loads, so every card, product page, search result and cart line 702 shows them without knowing about languages. No Arabic yet - English stays. */ 703 function localiseCatalog(list) { 704 if (!Array.isArray(list)) return; 705 list.forEach(function (p) { 706 if (!p || typeof p !== "object") return; 707 if (!p._en) { 708 try { Object.defineProperty(p, "_en", { value: { name: p.name, desc: p.desc, short: p.short }, enumerable: false }); } catch (e) { return; } 709 } 710 var ar = lang === "ar"; 711 p.name = ar && p.nameAr ? p.nameAr : p._en.name; 712 p.desc = ar && p.descAr ? p.descAr : p._en.desc; 713 p.short = ar ? (p.shortAr || (p.descAr ? "" : p._en.short)) : p._en.short; 714 }); 715 } 716 (function () { 717 var cat = window.SNIPER_CATALOG; 718 localiseCatalog(cat); 719 try { 720 Object.defineProperty(window, "SNIPER_CATALOG", { 721 configurable: true, enumerable: true, 722 get: function () { return cat; }, 723 set: function (v) { cat = v; localiseCatalog(cat); } 724 }); 725 } catch (e) { /* leave it as a plain value */ } 726 })(); 727 728 function apply() { 729 localiseCatalog(window.SNIPER_CATALOG); 730 var html = document.documentElement; 731 html.setAttribute("lang", lang); 732 html.setAttribute("dir", lang === "ar" ? "rtl" : "ltr"); 733 document.body.classList.toggle("is-ar", lang === "ar"); 734 735 if (lang === "ar" && !document.getElementById("ar-font")) { 736 var l = document.createElement("link"); 737 l.id = "ar-font"; 738 l.rel = "stylesheet"; 739 l.href = "https://fonts.googleapis.com/css2?family=Cairo:wght@400;500;600;700&display=swap"; 740 document.head.appendChild(l); 741 } 742 743 document.querySelectorAll("[data-i18n]").forEach(function (n) { 744 var key = n.getAttribute("data-i18n"); 745 if (!n.dataset.en) n.dataset.en = n.innerHTML; 746 n.setAttribute("data-i18n-lang", lang); 747 n.innerHTML = fill(lang === "ar" ? (AR[key] || n.dataset.en) : (HAS.c
747all(OEN, key) ? OEN[key] : n.dataset.en)); 748 }); 749 750 document.querySelectorAll("[data-i18n-attr]").forEach(function (n) { 751 n.getAttribute("data-i18n-attr").split(",").forEach(function (pair) { 752 var bits = pair.split(":"); 753 var attr = bits[0].trim(), key = bits[1].trim(); 754 /* dataset keys cannot hold "-x": aria-label is kept as data-en-aria-label */ 755 var store = "en" + attr.replace(/(^|-)([a-z])/g, function (m, d, c) { return c.toUpperCase(); }); 756 if (!n.dataset[store]) n.dataset[store] = n.getAttribute(attr) || ""; 757 n.setAttribute(attr, lang === "ar" ? (AR[key] || n.dataset[store]) : n.dataset[store]); 758 }); 759 }); 760 761 isolatePhones(); 762 phrasePass(document.body); 763 if (lang === "ar" || hasEn) { 764 if (!observer && window.MutationObserver) { 765 observer = new MutationObserver(onMutate); 766 observer.observe(document.body, { childList: true, subtree: true, characterData: true, attributes: true, attributeFilter: ATTRS }); 767 } 768 } 769 translateTitle(); 770 771 document.querySelectorAll(".js-lang").forEach(function (n) { 772 n.textContent = lang === "ar" ? "EN" : "AR"; 773 }); 774 document.dispatchEvent(new CustomEvent("sniper:lang", { detail: { lang: lang } })); 775 } 776 777 function set(next) { 778 lang = next; 779 try { localStorage.setItem(KEY, next); } catch (err) { /* ignore */ } 780 apply(); 781 } 782 783 document.addEventListener("click", function (e) { 784 var b = e.target.closest(".js-lang"); 785 if (!b) return; 786 e.preventDefault(); 787 set(lang === "ar" ? "en" : "ar"); 788 }); 789 790 window.sniperI18n = { t: t, set: set, fill: fill, get lang() { return lang; }, dict: AR, 791 /* a phrase in the current language, for scripts that build text themselves */ 792 p: function (en) { var o = (lang === "ar" || hasEn) ? translate(en, false) : null; return o == null ? en : o; } }; 793 794 /* This script sits at the top of <body>, so at this point the page below it 795 has not been parsed - there is nothing to translate yet. Set the document 796 direction immediately (it must be right before the first paint), then do 797 the text pass once the DOM exists. */ 798 document.documentElement.setAttribute("lang", lang); 799 document.documentElement.setAttribute("dir", lang === "ar" ? "rtl" : "ltr"); 800 if (document.readyState === "loading") { 801 document.addEventListener("DOMContentLoaded", apply); 802 } else { 803 apply(); 804 } 805})();
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.