PageSourceSearch

https://grigsi.com/js/grigsi-site-i18n.js?v=6

js grigsi.com collected 2026-09-24 14:44:42 UTC 27,893 bytes, 568 lines download raw bytes

1"use strict";
2/** Site-wide EN/BG — nav, footer, hub heroes, homepage panels. Requires grigsi-ui-lang.js + grigsi-site-i18n-strings.js */
3(function (global) {
4  var STORAGE_KEY = "grigsi-site-ui-lang";
5  var LEGACY_KEYS = [
6    "grigsi-ui-lang",
7    "grigsi-air-check-ui-lang",
8    "grigsi-transcribe-ui-lang",
9    "grigsi-illustrate-ui-lang",
10  ];
11
12  function stringsFor(lang) {
13    var pack = global.GriGsiSiteI18nStrings || {};
14    return pack[lang === "bg" ? "bg" : "en"] || pack.en || {};
15  }
16
17  function t(lang, key) {
18    var s = stringsFor(lang);
19    return Object.prototype.hasOwnProperty.call(s, key) ? s[key] : null;
20  }
21
22  function migrateLegacyLang() {
23    if (!global.GriGsiUiLang) return;
24    try {
25      var cur = global.localStorage.getItem(STORAGE_KEY);
26      if (cur === "bg" || cur === "en") return;
27    } catch (_) {}
28    for (var i = 0; i < LEGACY_KEYS.length; i++) {
29      try {
30        var v = global.localStorage.getItem(LEGACY_KEYS[i]);
31        if (v === "bg" || v === "en") {
32          global.GriGsiUiLang.save(STORAGE_KEY, v);
33          return;
34        }
35      } catch (_) {}
36    }
37  }
38
39  function applyAttr(el, attr, lang, key) {
40    var val = t(lang, key);
41    if (val == null) return;
42    el.setAttribute(attr, val);
43  }
44
45  function applyDataI18n(lang) {
46    global.document.querySelectorAll("[data-i18n]").forEach(function (el) {
47      if (el.classList.contains("grigsi-lang-btn")) return;
48      var val = t(lang, el.getAttribute("data-i18n"));
49      if (val != null) el.textContent = val;
50    });
51    global.document.querySelectorAll("[data-i18n-html]").forEach(function (el) {
52      var val = t(lang, el.getAttribute("data-i18n-html"));
53      if (val != null) el.innerHTML = val;
54    });
55    global.document.querySelectorAll("[data-i18n-aria]").forEach(function (el) {
56      applyAttr(el, "aria-label", lang, el.getAttribute("data-i18n-aria"));
57    });
58    global.document.querySelectorAll("[data-i18n-placeholder]").forEach(function (el) {
59      var val = t(lang, el.getAttribute("data-i18n-placeholder"));
60      if (val != null) el.placeholder = val;
61    });
62    global.document.querySelectorAll("[data-i18n-title]").forEach(function (el) {
63      applyAttr(el, "title", lang, el.getAttribute("data-i18n-title"));
64    });
65  }
66
67  /** [selector, key, mode?] mode: html | placeholder | aria-label */
68  var PAGE_SELECTORS = {
69    "/": [
70      [".purple-bar-hero", "home.hero"],
71      [".purple-bar-lead", "home.lead"],
72      [".purple-bar-inner > .purple-bar-body:not(.purple-bar-bridge)", "home.body"],
73      [".purple-bar-bridge", "home.bridge"],
74      ["#home-connect-heading", "home.section.connect"],
75      [
76        ".home-connect-panel--sendi .home-connect-panel__eyebrow",
77        "home.sendi.eyebrow",
78      ],
79      [".home-connect-panel--sendi .home-connect-panel__title", "home.sendi.title"],
80      [".home-connect-panel--sendi .home-connect-panel__lead", "home.sendi.lead"],
81      [".home-connect-panel--sendi .home-connect-panel__cta", "home.sendi.cta"],
82      [
83        ".home-connect-panel--names .home-connect-panel__eyebrow",
84        "home.labels.eyebrow",
85      ],
86      [".home-connect-panel--names .home-connect-panel__title", "home.labels.title"],
87      [".home-connect-panel--names .home-connect-panel__lead", "home.labels.lead"],
88      [
89        ".home-connect-panel--names .home-connect-panel__cta--primary",
90        "home.labels.cta",
91      ],
92      [
93        ".home-connect-panel--names .home-connect-panel__actions .home-connect-panel__cta:not(.home-connect-panel__cta--primary)",
94        "home.labels.sync",
95      ],
96      [".home-connect-panel--names .home-connect-panel__privacy", "home.labels.privacy"],
97      [".home-connect-panel--find .home-connect-panel__eyebrow", "home.find.eyebrow"],
98      [".home-connect-panel--find .home-connect-panel__title", "home.find.title"],
99      [".home-connect-panel--find .home-connect-panel__lead", "home.find.lead"],
100      [".home-connect-panel--find .home-connect-panel__cta", "home.find.cta"],
101      ["#home-data-heading", "home.section.data"],
102      [
103        ".home-connect-panel--open-data .home-connect-panel__eyebrow",
104        "home.data.macro.eyebrow",
105      ],
106      [
107        ".home-connect-panel--open-data .home-connect-panel__title-text",
108        "home.data.macro.title",
109      ],
110      [".home-connect-panel--open-data .home-connect-panel__lead", "home.data.macro.lead"],
111      [".home-connect-panel--open-data .home-connect-panel__cta", "home.data.macro.cta"],
112      [
113        ".home-connect-panel--official-data .home-connect-panel__eyebrow",
114        "home.data.bg.eyebrow",
115      ],
116      [
117        ".home-connect-panel--official-data .home-connect-panel__title-text",
118        "home.data.bg.title",
119      ],
120      [".home-connect-panel--official-data .home-connect-panel__lead", "home.data.bg.lead"],
121      [".home-connect-panel--official-data .home-connect-panel__cta", "home.data.bg.cta"],
122      ["#home-production-heading", "home.section.production"],
123      [
124        ".home-connect-panel--air-check .home-connect-panel__eyebrow",
125        "home.prod.air.eyebrow",
126      ],
127      [".home-connect-panel--air-check .home-connect-panel__title-text", "home.prod.air.title"],
128      [".home-connect-panel--air-check .home-connect-panel__lead", "home.prod.air.lead"],
129      [".home-connect-panel--air-check .home-connect-panel__cta", "home.prod.air.cta"],
130      [
131        ".home-connect-panel--fresh-now .home-connect-panel__eyebrow",
132        "home.prod.fn.eyebrow",
133      ],
134      [".home-connect-panel--fresh-now .home-connect-panel__title-text", "home.prod.fn.title"],
135      [".home-connect-panel--fresh-now .home-connect-panel__lead", "home.prod.fn.lead"],
136      [".home-connect-panel--fresh-now .home-connect-panel__cta", "home.prod.fn.cta"],
137      [".home-connect-panel--fresh-now .home-connect-panel__soft", "home.prod.fn.soft"],
138      [
139        ".home-connect-panel--trusted-sources .home-connect-panel__eyebrow",
140        "home.prod.trustedSources.eyebrow",
141      ],
142      [
143        ".home-connect-panel--trusted-sources .home-connect-panel__title-text",
144        "home.prod.trustedSources.title",
145      ],
146      [".home-connect-panel--trusted-sources .home-connect-panel__lead", "home.prod.trustedSources.lead"],
147      [".home-connect-panel--trusted-sources .home-connect-panel__cta", "home.prod.trustedSources.cta"],
148      [".home-connect-panel--trusted-sources .home-connect-panel__soft", "home.prod.trustedSources.soft"],
149      [
150        ".home-connect-panel--easy-show .home-connect-panel__eyebrow",
151        "home.prod.easy.eyebrow",
152      ],
153      [".home-connect-panel--easy-show .home-connect-panel__title-text", "home.prod.easy.title"],
154      [".home-connect-panel--easy-show .home-connect-panel__lead", "home.prod.easy.lead"],
155      [".home-connect-panel--easy-show .home-connect-panel__cta", "home.prod.easy.cta"],
156      [".home-connect-panel--easy-show .home-connect-panel__soft", "home.prod.easy.soft"],
157      [
158        ".home-connect-panel--show-maker .home-connect-panel__eyebrow",
159        "home.prod.show.eyebrow",
160      ],
161      [".home-connect-panel--show-maker .home-connect-panel__title-text", "home.prod.show.title"],
162      [".home-connect-panel--show-maker .home-connect-panel__lead", "home.prod.show.lead"],
163      [".home-connect-panel--show-maker .home-connect-panel__cta", "home.prod.show.cta"],
164      [".home-connect-panel--show-maker .home-connect-panel__soft", "home.prod.show.setup"],
165      [
166        ".home-connect-panel--edit .home-connect-panel__eyebrow",
167        "home.prod.edit.eyebrow",
168      ],
169      [".home-connect-panel--edit .home-connect-panel__title-text", "home.prod.edit.title"],
170      [".home-connect-panel--edit .home-connect-panel__lead", "home.prod.edit.lead"],
171      [".home-connect-panel--edit .home-connect-panel__cta", "home.prod.edit.cta"],
172      [".home-connect-panel--edit .home-connect-panel__soft", "home.prod.edit.soft"],
173      [
174        ".home-connect-panel--meet .home-connect-panel__eyebrow",
175        "home.prod.meet.eyebrow",
176      ],
177      [".home-connect-panel--meet .home-connect-panel__title-text", "home.prod.meet.title"],
178      [".home-connect-panel--meet .home-connect-panel__lead", "home.prod.meet.lead"],
179      [".home-connect-panel--meet .home-connect-panel__cta", "home.prod.meet.cta"],
180      [".home-connect-panel--meet .home-connect-panel__soft", "home.prod.meet.soft"],
181      [
182        ".home-connect-panel--conference .home-connect-panel__eyebrow",
183        "home.prod.conf.eyebrow",
184      ],
185      [".home-connect-panel--conference .home-connect-panel__title-text", "home.prod.conf.title"],
186      [".home-connect-panel--conference .home-connect-panel__lead", "home.prod.conf.lead"],
187      [".home-connect-panel--conference .home-connect-panel__cta", "home.prod.conf.cta"],
188      [".home-connect-panel--conference .home-connect-panel__soft", "home.prod.conf.soft"],
189      [
190        ".home-connect-panel--cloud-floor .home-connect-panel__eyebrow",
191        "home.prod.floor.eyebrow",
192      ],
193      [".home-connect-panel--cloud-floor .home-connect-panel__title-text", "home.prod.floor.title"],
194      [".home-connect-panel--cloud-floor .home-connect-panel__lead", "home.prod.floor.lead"],
195      [".home-connect-panel--cloud-floor .home-connect-panel__cta", "home.prod.floor.cta"],
196      [".home-connect-panel--cloud-floor .home-connect-panel__soft", "home.prod.floor.soft"],
197      [
198        ".home-connect-panel--graphics .home-connect-panel__eyebrow",
199        "home.prod.gx.eyebrow",
200      ],
201      [".home-connect-panel--graphics .home-connect-panel__title-text", "home.prod.gx.title"],
202      [".home-connect-panel--graphics .home-connect-panel__lead", "home.prod.gx.lead"],
203      [".home-connect-panel--graphics .home-connect-panel__cta", "home.prod.gx.cta"],
204      [".home-connect-panel--graphics .home-connect-panel__soft", "home.prod.gx.soft"],
205      [
206        ".home-connect-panel--illustrate .home-connect-panel__eyebrow",
207        "home.prod.cut.eyebrow",
208      ],
209      [".home-connect-panel--illustrate .home-connect-panel__title-text", "home.prod.cut.title"],
210      [".home-connect-panel--illustrate .home-connect-panel__lead", "home.prod.cut.lead"],
211      [".home-connect-panel--illustrate .home-connect-panel__cta", "home.prod.cut.cta"],
212      [
213        ".home-connect-panel--illustrate .home-connect-panel__soft",
214        "home.prod.cut.display",
215      ],
216      [".home-connect-panel--avp .home-connect-panel__eyebrow", "home.prod.avp.eyebrow"],
217      [".home-connect-panel--avp .home-connect-panel__title-text", "home.prod.avp.title"],
218      [".home-connect-panel--avp .home-connect-panel__lead", "home.prod.avp.lead"],
219      [".home-connect-panel--avp .home-connect-panel__cta", "home.prod.avp.cta"],
220      [
221        ".home-connect-panel--transcribe .home-connect-panel__eyebrow",
222        "home.prod.tx.eyebrow",
223      ],
224      [".home-connect-panel--transcribe .home-connect-panel__title-text", "home.prod.tx.title"],
225      [".home-connect-panel--transcribe .home-connect-panel__lead", "home.prod.tx.lead"],
226      [".home-connect-panel--transcribe .home-connect-panel__cta", "home.prod.tx.cta"],
227      [
228        ".home-connect-panel--rundown .home-connect-panel__eyebrow",
229        "home.prod.rd.eyebrow",
230      ],
231      [".home-connect-panel--rundown .home-connect-panel__title-text", "home.prod.rd.title"],
232      [".home-connect-panel--rundown .home-connect-panel__lead", "home.prod.rd.lead"],
233      [".home-connect-panel--rundown .home-connect-panel__cta", "home.prod.rd.cta"],
234      [".home-connect-panel--rundown .home-connect-panel__soft", "home.prod.rd.setup"],
235      ["#home-money-heading", "home.section.money"],
236      [".home-money-title .home-money-title-text", "home.money.title"],
237      [".home-money-lead", "home.money.lead"],
238      [".home-money-cta", "home.money.cta"],
239      ["#home-extensions-heading", "home.ext.title"],
240      [".home-extensions-title-text", "home.ext.title"],
241      [".home-extensions-lead", "home.ext.lead"],
242      [".home-extensions-cta", "home.ext.cta"],
243      ["#home-trust-heading", "home.section.trust"],
244      [
245        ".home-connect-panel--trust-check .home-connect-panel__eyebrow",
246        "home.trust.check.eyebrow",
247      ],
248      [
249        ".home-connect-panel--trust-check .home-connect-panel__title-text",
250        "home.trust.check.title",
251      ],
252      [".home-connect-panel--trust-check .home-connect-panel__lead", "home.trust.check.lead"],
253      [".home-connect-panel--trust-check .home-connect-panel__cta", "home.trust.check.cta"],
254      [
255        ".home-connect-panel--trust-index .home-connect-panel__eyebrow",
256        "home.trust.index.eyebrow",
257      ],
258      [
259        ".home-connect-panel--trust-index .home-connect-panel__title-text",
260        "home.trust.index.title",
261      ],
262      [".home-connect-panel--trust-index .home-connect-panel__lead", "home.trust.index.lead"],
263      [".home-connect-panel--trust-index .home-connect-panel__cta", "home.trust.index.cta"],
264      [
265        ".home-connect-panel--similarity .home-connect-panel__eyebrow",
266        "home.trust.sim.eyebrow",
267      ],
268      [".home-connect-panel--similarity .home-connect-panel__title-text", "home.trust.sim.title"],
269      [".home-connect-panel--similarity .home-connect-panel__lead", "home.trust.sim.lead"],
270      [".home-connect-panel--similarity .home-connect-panel__cta", "home.trust.sim.cta"],
271      [".home-connect-panel--learn .home-connect-panel__eyebrow", "home.trust.learn.eyebrow"],
272      [".home-connect-panel--learn .home-connect-panel__title-text", "home.trust.learn.title"],
273      [".home-connect-panel--learn .home-connect-panel__lead", "home.trust.learn.lead"],
274      [".home-connect-panel--learn .home-connect-panel__cta", "home.trust.learn.cta"],
275      [".home-connect-panel--noise .home-connect-panel__eyebrow", "home.trust.noise.eyebrow"],
276      [".home-connect-panel--noise .home-connect-panel__title-text", "home.trust.noise.title"],
277      [".home-connect-panel--noise .home-connect-panel__lead", "home.trust.noise.lead"],
278      [".home-connect-panel--noise .home-connect-panel__cta", "home.trust.noise.cta"],
279      ["#home-protect-heading", "home.section.protect"],
280      [
281        ".home-connect-panel--key-file .home-connect-panel__eyebrow",
282        "home.protect.key.eyebrow",
283      ],
284      [".home-connect-panel--key-file .home-connect-panel__title-text", "home.protect.key.title"],
285      [".home-connect-panel--key-file .home-connect-panel__lead", "home.protect.key.lead"],
286      [".home-connect-panel--key-file .home-connect-panel__cta", "home.protect.key.cta"],
287      [
288        ".home-connect-panel--lock-file .home-connect-panel__eyebrow",
289        "home.protect.lock.eyebrow",
290      ],
291      [".home-connect-panel--lock-file .home-connect-panel__title-text", "home.protect.lock.title"],
292      [".home-connect-panel--lock-file .home-connect-panel__lead", "home.protect.lock.lead"],
293      [".home-connect-panel--lock-file .home-connect-panel__cta", "home.protect.lock.cta"],
294      [
295        ".home-connect-panel--proof .home-connect-panel__eyebrow",
296        "home.protect.proof.eyebrow",
297      ],
298      [".home-connect-panel--proof .home-connect-panel__title-text", "home.protect.proof.title"],
299      [".home-connect-panel--proof .home-connect-panel__lead", "home.protect.proof.lead"],
300      [".home-connect-panel--proof .home-connect-panel__cta", "home.protect.proof.cta"],
301      [".home-connect-panel--card .home-connect-panel__eyebrow", "home.protect.card.eyebrow"],
302      [".home-connect-panel--card .home-connect-panel__title-text", "home.protect.card.title"],
303      [".home-connect-panel--card .home-connect-panel__lead", "home.protect.card.lead"],
304      [".home-connect-panel--card .home-connect-panel__cta", "home.protect.card.cta"],
305      ["#home-together-heading", "home.section.together"],
306      [".home-connect-panel--polls .home-connect-panel__eyebrow", "home.together.polls.eyebrow"],
307      [".home-connect-panel--polls .home-connect-panel__title-text", "home.together.polls.title"],
308      [".home-connect-panel--polls .home-connect-panel__lead", "home.together.polls.lead"],
309      [".home-connect-panel--polls .home-connect-panel__cta", "home.together.polls.cta"],
310      [
311        ".home-connect-panel--surveys .home-connect-panel__eyebrow",
312        "home.together.surveys.eyebrow",
313      ],
314      [".home-connect-panel--surveys .home-connect-panel__title-text", "home.together.surveys.title"],
315      [".home-connect-panel--surveys .home-connect-panel__lead", "home.together.surveys.lead"],
316      [".home-connect-panel--surveys .home-connect-panel__cta", "home.together.surveys.cta"],
317      [".home-connect-panel--votes .home-connect-panel__eyebrow", "home.together.votes.eyebrow"],
318      [".home-connect-panel--votes .home-connect-panel__title-text", "home.together.votes.title"],
319      [".home-connect-panel--votes .home-connect-panel__lead", "home.together.votes.lead"],
320      [".home-connect-panel--votes .home-connect-panel__cta", "home.together.votes.cta"],
321      ["#home-build-heading", "home.section.build"],
322      [".home-connect-panel--api .home-connect-panel__eyebrow", "home.build.api.eyebrow"],
323      [".home-connect-panel--api .home-connect-panel__title-text", "home.build.api.title"],
324      [".home-connect-panel--api .home-connect-panel__lead", "home.build.api.lead"],
325      [".home-connect-panel--api .home-connect-panel__cta", "home.build.api.cta"],
326      [
327        ".home-connect-panel--translator .home-connect-panel__eyebrow",
328        "home.build.trans.eyebrow",
329      ],
330      [".home-connect-panel--translator .home-connect-panel__title-text", "home.build.trans.title"],
331      [".home-connect-panel--translator .home-connect-panel__lead", "home.build.trans.lead"],
332      [".home-connect-panel--translator .home-connect-panel__cta", "home.build.trans.cta"],
333      [".home-connect-panel--reach .home-connect-panel__eyebrow", "home.build.reach.eyebrow"],
334      [".home-connect-panel--reach .home-connect-panel__title-text", "home.build.reach.title"],
335      [".home-connect-panel--reach .home-connect-panel__lead", "home.build.reach.lead"],
336      [".home-connect-panel--reach .home-connect-panel__cta", "home.build.reach.cta"],
337      [".home-connect-panel--sendi .home-connect-panel__soft", "common.localSoftware"],
338      [".home-connect-panel--find .home-connect-panel__soft", "common.localSoftware"],
339      [".home-connect-panel--air-check .home-connect-panel__soft", "common.localSoftware"],
340      [".home-connect-panel--avp .home-connect-panel__soft", "common.localSoftware"],
341      [".home-connect-panel--lock-file .home-connect-panel__soft", "common.localSoftware"],
342      [".home-connect-panel--card .home-connect-panel__soft", "common.localSoftware"],
343      ["#home-who-am-i-heading", "home.who.title"],
344      [".home-who-am-i-lead", "home.who.lead"],
345      [".home-who-am-i-card > p:nth-of-type(2)", "home.who.p1"],
346      [".home-who-am-i-pivot", "home.who.pivot"],
347      [".home-who-am-i-card > p:nth-of-type(4)", "home.who.p2"],
348      [".home-who-am-i-card > p:nth-of-type(5)", "home.who.p3"],
349      [".home-who-am-i-ideas", "home.who.ideas"],
350      [".home-who-am-i-card > p:nth-of-type(7)", "home.who.p4"],
351      [".home-who-am-i-thesis", "home.who.thesis"],
352      [".home-who-am-i-outro p:nth-child(1)", "home.who.out1"],
353      [".home-who-am-i-outro p:nth-child(2)", "home.who.out2"],
354      [".home-who-am-i-outro p:nth-child(3)", "home.who.out3Html", "html"],
355      ["#contact .hx-contact__invite", "home.story.contactTitle"],
356      ["#contact input[name='name']", "home.story.contactName", "placeholder"],
357      ["#contact input[name='email']", "home.story.contactEmail", "placeholder"],
358      ["#contact textarea[name='message']", "home.story.contactMessage", "placeholder"],
359      ["#contact .btn-primary", "home.story.contactSend"],
360      ["#store-modal-title", "store.title"],
361      ["#store-modal p", "store.lead"],
362      ["#store-modal-close", "store.close"],
363      ["#store-modal [data-store-soon='edge']", "store.soon"],
364      ["#store-modal [data-store-soon='safari']", "store.soon"],
365    ],
366    "/tools.html": [
367      [".hero-title-single", "page.tools.title"],
368      [".hero-subtitle-bottom", "page.tools.lead"],
369    ],
370    "/solutions.html": [
371      [".hero-title-single", "page.solutions.title"],
372      [".hero-subtitle-bottom", "page.solutions.lead"],
373    ],
374    "/services.html": [
375      [".hero-title-single", "page.services.title"],
376      [".hero-subtitle-bottom", "page.services.lead"],
377    ],
378    "/pricing.html": [
379      [".hero-title-single", "page.pricing.title"],
380      [".hero-subtitle-bottom", "page.pricing.lead"],
381    ],
382    "/payment.html": [
383      [".hero-title-single", "page.payment.title"],
384      [".hero-subtitle-bottom", "page.payment.lead"],
385    ],
386    "/downloads": [
387      [".page h1", "downloads.title"],
388      [".page .lead", "downloads.lead"],
389      ["#ext h2", "downloads.extTitle"],
390      ["#ext .ext-note", "downloads.extLead"],
391      ["#gi h2", "downloads.spaceTitle"],
392      [".page > .note", "downloads.note"],
393    ],
394    "/about.html": [
395      [".hero-title-single", "page.about.title"],
396      [".hero-subtitle-bottom", "page.about.lead"],
397    ],
398    "/faq.html": [
399      [".hero-title-single", "page.faq.h1"],
400      [".hero-subtitle-bottom", "page.faq.subtitle"],
401      [".faq-item:nth-child(1) .faq-q", "faq.q1"],
402      [".faq-item:nth-child(1) .faq-a", "faq.a1", "html"],
403      [".faq-item:nth-child(2) .faq-q", "faq.q2"],
404      [".faq-item:nth-child(2) .faq-a", "faq.a2", "html"],
405      [".faq-item:nth-child(3) .faq-q", "faq.q3"],
406      [".faq-item:nth-child(3) .faq-a", "faq.a3", "html"],
407      [".faq-item:nth-child(4) .faq-q", "faq.q4"],
408      [".faq-item:nth-child(4) .faq-a", "faq.a4", "html"],
409      [".faq-item:nth-child(5) .faq-q", "faq.q5"],
410      [".faq-item:nth-child(5) .faq-a", "faq.a5", "html"],
411      [".faq-item:nth-child(6) .faq-q", "faq.q6"],
412      [".faq-item:nth-child(6) .faq-a", "faq.a6", "html"],
413      [".faq-item:nth-child(7) .faq-q", "faq.q7"],
414      [".faq-item:nth-child(7) .faq-a", "faq.a7", "html"],
415      [".faq-item:nth-child(8) .faq-q", "faq.q8"],
416      [".faq-item:nth-child(8) .faq-a", "faq.a8", "html"],
417      [".faq-item:nth-child(9) .faq-q", "faq.q9"],
418      [".faq-item:nth-child(9) .faq-a", "faq.a9", "html"],
419      [".faq-item:nth-child(10) .faq-q", "faq.q10"],
420      [".faq-item:nth-child(10) .faq-a", "faq.a10", "html"],
421      [".faq-item:nth-child(11) .faq-q", "faq.q11"],
422      [".faq-item:nth-child(11) .faq-a", "faq.a11", "html"],
423      [".faq-item:nth-child(12) .faq-q", "faq.q12"],
424      [".faq-item:nth-child(12) .faq-a", "faq.a12", "html"],
425      [".faq-item:nth-child(13) .faq-q", "faq.q13"],
426      [".faq-item:nth-child(13) .faq-a", "faq.a13", "html"],
427      [".faq-item:nth-child(14) .faq-q", "faq.q14"],
428      [".faq-item:nth-child(14) .faq-a", "faq.a14", "html"],
429      [".hub-cta-row a[href='/']", "page.faq.cta.home"],
430      [".hub-cta-row a[href='/solutions.html']", "page.faq.cta.solutions"],
431      ["#contact h2", "contact.title"],
432      ["#contact select.contact-select option[value='']", "contact.topic"],
433      ["#contact select.contact-select option[value='partnership']", "contact.topic.partnership"],
434      ["#contact select.contact-select option[value='feedback']", "contact.topic.feedback"],
435      ["#contact select.contact-select option[value='bug']", "contact.topic.bug"],
436      ["#contact select.contact-select option[value='media']", "contact.topic.media"],
437      ["#contact select.contact-select option[value='investment']", "contact.topic.investment"],
438      ["#contact select.contact-select option[value='other']", "contact.topic.other"],
439      ["#contact input[name='name']", "contact.name", "placeholder"],
440      ["#contact textarea[name='message']", "contact.message", "placeholder"],
441      [".contact-message-hint", "contact.hint"],
442      [".meeting-checkbox span:last-child", "contact.meeting"],
443      ["label[for='meeting-date']", "contact.meetingWhen"],
444      ["#contact .btn-primary", "contact.send"],
445    ],
446    "/how.html": [[ ".hero-title-single", "page.how.title" ]],
447    "/privacy.html": [[ ".hero-title-single", "page.privacy.title" ]],
448  };
449
450  function pagePath() {
451    try {
452      var p = global.location.pathname || "/";
453      if (p.endsWith("/index.html")) p = p.slice(0, -"/index.html".length) + "/";
454      if (p !== "/" && p.endsWith("/")) p = p.slice(0, -1);
455      return p || "/";
456    } catch (_) {
457      return "/";
458    }
459  }
460
461  function applyPageSelectors(lang) {
462    var path = pagePath();
463    var rows = PAGE_SELECTORS[path];
464    if (!rows) return;
465    rows.forEach(function (row) {
466      var sel = row[0];
467      var key = row[1];
468      var mode = row[2] || "text";
469      var val = t(lang, key);
470      if (val == null) return;
471      global.document.querySelectorAll(sel).forEach(function (el) {
472        if (mode === "html") el.innerHTML = val;
473        else if (mode === "placeholder") el.placeholder = val;
474        else if (mode === "aria-label") el.setAttribute("aria-label", val);
475        else el.textContent = val;
476      });
477    });
478  }
479
480  function applyDocumentLang(lang) {
481    global.document.documentElement.lang = lang === "bg" ? "bg" : "en";
482  }
483
484  function applyMeta(lang) {
485    var path = pagePath();
486    if (path === "/") {
487      var hero = t(lang, "home.hero");
488      if (hero) {
489        global.document.title = "GriGsi — " + hero;
490        var desc = global.document.querySelector('meta[name="description"]');
491        if (desc) {
492          var body = t(lang, "home.body");
493          var bridge = t(lang, "home.bridge");
494          var parts = [hero];
495          if (body) parts.push(body.replace(/\.$/, ""));
496          if (bridge) parts.push(bridge.replace(/\.$/, ""));
497          desc.setAttribute("content", parts.join(". ") + ".");
498        }
499      }
500    } else if (path === "/downloads") {
501      var dlTitle = t(lang, "downloads.title");
502      if (dlTitle) global.document.title = dlTitle;
503    } else if (path === "/payment.html") {
504      var payTitle = t(lang, "page.payment.title");
505      if (payTitle) global.document.title = payTitle + " — GriGsi";
506    } else if (path === "/official-data-hub") {
507      var ofdhTitle = t(lang, "ofdh.metaTitle");
508      if (ofdhTitle) global.document.title = ofdhTitle;
509      var ofdhDesc = t(lang, "ofdh.metaDesc");
510      var ofdhMeta = global.document.querySelector('meta[name="description"]');
511      if (ofdhDesc && ofdhMeta) ofdhMeta.setAttribute("content", ofdhDesc);
512    }
513  }
514
515  var langController = null;
516
517  function syncLangButtons(lang) {
518    var bgBtn = global.document.getElementById("grigsi-lang-bg");
519    var enBtn = global.document.getElementById("grigsi-lang-en");
520    if (bgBtn) {
521      bgBtn.textContent = "БГ";
522      bgBtn.classList.toggle("is-on", lang === "bg");
523    }
524    if (enBtn) {
525      enBtn.textContent = "EN";
526      enBtn.classList.toggle("is-on", lang === "en");
527    }
528  }
529
530  function applyLang(lang) {
531    lang = lang === "bg" ? "bg" : "en";
532    applyDocumentLang(lang);
533    applyDataI18n(lang);
534    applyPageSelectors(lang);
535    applyMeta(lang);
536    syncLangButtons(lang);
537    if (langController && typeof langController.sync === "function") {
538      langController.sync(lang);
539    }
540    try {
541      global.localStorage.setItem(STORAGE_KEY, lang);
542    } catch (_) {}
543    try {
544      global.dispatchEvent(new CustomEvent("grigsi-site-lang", { detail: { lang: lang } }));
545    } catch (_) {}
546  }
547
548  function boot() {
549    migrateLegacyLang();
550    if (!global.GriGsiUiLang) {
551      applyLang("en");
552      return;
553    }
554    langController = global.GriGsiUiLang.wireButtons("grigsi-lang-bg", "grigsi-lang-en", STORAGE_KEY, applyLang);
555  }
556
557  if (global.document.readyState === "loading") {
558    global.document.addEventListener("DOMContentLoaded", boot);
559  } else {
560    boot();
561  }
562
563  global.GriGsiSiteI18n = {
564    t: t,
565    apply: applyLang,
566    storageKey: STORAGE_KEY,
567  };
568})(typeof window !== "undefined" ? window : globalThis);

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.