PageSourceSearch

https://temu-plus.com/i18n.js

js temu-plus.com collected 2026-10-02 01:45:51 UTC 18,273 bytes, 267 lines download raw bytes

1/* Temu+ marketing site — dependency-free client-side i18n.
2 *
3 * Mirrors the extension's i18n UX (see extension/src/lib/i18n.svelte.ts):
4 *   effective language = explicit override (localStorage 'tplus-lang')
5 *                        ?? browser language (navigator.language)
6 *                        ?? English.
7 * English is the master; any missing key in another language falls back to it,
8 * so a partial catalogue never shows a blank.
9 *
10 * Markup contract:
11 *   <el data-i18n="some.key">…</el>  → el.innerHTML = STRINGS[lang]['some.key']
12 * innerHTML (not textContent) so inline <em>/<strong>/<a>/<span> in a string
13 * survive. The catalogue is our own trusted content — no user input.
14 *
15 * Same no-build, vanilla approach as theme.js. Legal pages stay English-only.
16 */
17(function () {
18  'use strict';
19
20  var LANGS = ['en', 'sr', 'de', 'fr', 'es', 'it', 'uk'];
21  var NAMES = {
22    en: 'English', sr: 'Srpski', de: 'Deutsch', fr: 'Français',
23    es: 'Español', it: 'Italiano', uk: 'Українська'
24  };
25  var KEY = 'tplus-lang';
26
27  // === Translation catalogue ===============================================
28  // English is the master. Other languages are merged in below (I18N_ADD).
29  var STRINGS = {
30    en: {
31      'meta.title': 'Temu+ — See what you actually paid on Temu',
32
33      'nav.features': 'Features',
34      'nav.pro': 'Pro',
35      'nav.pricing': 'Pricing',
36      'nav.guides': 'Guides',
37      'nav.faq': 'FAQ',
38      'nav.waitlist': 'Join the waitlist',
39      'nav.install': 'Add to Chrome',
40
41      'banner': '🎉 <strong>Temu+ is live</strong> — free on Chrome, or the full build <strong>with Pro</strong> on <a href="https://microsoftedge.microsoft.com/addons/detail/icghgpfdgbajbmegpjehihndfflfaako" target="_blank" rel="noopener">Edge</a>. Founder price <strong>€5/yr</strong>. <a href="https://chromewebstore.google.com/detail/iehnodlgkoimdohpcjjlhhfehblcfaea" target="_blank" rel="noopener">Add Lite to Chrome →</a>',
42      'disclaimer': 'Independent tool. Not affiliated with, endorsed by, or sponsored by Temu or PDD Holdings. “Temu” is a trademark of its respective owner.',
43
44      'hero.pill': 'Lite free on Chrome · Pro available now',
45      'hero.h1': 'See what you <em>actually</em> paid on Temu.',
46      'hero.lede': 'Temu+ reads your own order history and shows the real per-item cost, honest refund accounting, and which items are now cheap enough to claim a price-adjustment refund — all processed locally in your browser. Nothing is ever uploaded.',
47      'hero.ctaWaitlist': 'Join the waitlist',
48      'hero.ctaInstall': 'Add Lite to Chrome — free',
49      'hero.ctaPro': 'See Pro',
50      'hero.note': 'Founder price €5/year · Free forever core · No account, no tracking',
51
52      'why.eyebrow': 'Why it exists',
53      'why.h2': 'Temu’s receipts are designed to confuse you.',
54      'why.sub': 'Cart-level coupons, store credit, and a marketing “discount” off a price nobody pays all blur into one number. Temu+ pulls them apart.',
55      'why.c1t': 'Your real per-item cost',
56      'why.c1d': 'An order’s checkout total is split across its items by listed sale price, so cart coupons and credit don’t vanish into one bundled figure.',
57      'why.c2t': 'Credit isn’t cash',
58      'why.c2d': 'Money-back refunds, credit returned to your balance, and promo credit are reported as separate categories — because store credit is not money back in your pocket.',
59      'why.c3t': 'No fake “savings”',
60      'why.c3d': 'Temu’s “Item discount” (MSRP → sticker) is a marketing anchor, so we don’t count it as a real discount. Only actual cart-level reductions show up.',
61
62      'free.eyebrow': 'Temu+ Lite — free forever',
63      'free.h2': 'The honest dashboard',
64      'free.sub': 'Everything you need to understand your Temu spending — at no cost.',
65      'free.f1t': 'Period-aware summary',
66      'free.f1d': 'Money out, orders, items, refunds &amp; cancellations, credit gained, and checkout discounts — each broken into its sources, for any period.',
67      'free.f2t': 'Full credit ledger',
68      'free.f2d': 'Captured from Temu’s wallet endpoint: credit-back promos, price-adjustment refunds, late-delivery compensation, and credit spent — all surfaced separately.',
69      'free.f3t': 'Coupon vs. credit split',
70      'free.f3d': 'Per order: the coupon code used, exclusive item promo, credit balance redeemed, and shipping line, broken out from the bundled total.',
71      'free.f4t': 'Gift vs. credit-paid',
72      'free.f4d': 'Both show as 0 in Temu’s UI. We flag genuine “Temu present” orders apart from ones credit or coupons simply brought to zero.',
73      'free.f5t': 'Wallet &amp; coupons at a glance',
74      'free.f5d': 'Live credit balance plus usable coupons, sorted by expiry with one-click copy — right in the top bar.',
75      'free.f6t': 'Private mode',
76      'free.f6d': 'One tap masks every amount and blurs the chart — safe for screenshots and screen-sharing.',
77      'free.f7t': 'Export &amp; import',
78      'free.f7d': 'Your data to CSV or JSON anytime, and restore from a backup. It’s your data — it stays portable.',
79      'free.f8t': 'Health check',
80      'free.f8d': 'Built-in probes verify Temu’s data shapes still match — so you know the numbers are trustworthy.',
81
82      'pro.eyebrow': 'Temu+ Pro',
83      'pro.h2': 'For power shoppers',
84      'pro.sub': 'Everything in Lite, plus the power tools that pay for themselves.',
85      'pro.h1t': 'Multiple accounts',
86      'pro.h1d': 'Keep data fingerprinted per Temu account and switch or combine views, with per-account colors and custom names.',
87      'pro.h2t': 'Reseller',
88      'pro.h2d': 'Your true cost-per-item becomes a cost basis, with live profit and margin per product and a clean inventory view — for anyone who buys to sell again.',
89      'pro.h6t': 'Refund alerts',
90      'pro.h6d': 'Two ways to get money back: <strong>price adjustments</strong> flag items whose price dropped inside Temu’s 30-day window so you can claim the difference and keep the item, and <strong>returns closing soon</strong> reminds you which items leave their 90-day return window in the next 5 days — with the cash + credit you’d get back.',
91      'pro.h4t': 'Arriving today',
92      'pro.h4d': 'Reads the delivery status already in your orders to surface what’s out for delivery today, plus what’s in transit and shipped — no extra requests, just the data from your normal sync.',
93      'pro.h3t': 'Dark mode',
94      'pro.h3d': 'A full dark theme for the whole dashboard — easy on the eyes, day or night.',
95      'pro.h5t': 'Price tracker',
96      'pro.h5d': 'Import your Temu wishlist and follow any item’s price over time, so you can spot a real drop before you rebuy.',
97      'pro.betaLabel': 'Also in Pro',
98      'pro.soonTag': 'Coming soon',
99      'pro.note': '<strong>An honest note on price adjustments:</strong> the amount shown is <em>Temu’s own calculated figure</em> for that item. You still submit the claim, Temu approves every price-adjustment request, and a refund is never guaranteed. We surface the opportunity — the rest is between you and Temu.',
100
101      'screens.eyebrow': 'See it in action',
102      'screens.h2': 'Honest numbers, clearly laid out',
103      'screens.sub': 'A look at the dashboard and the breakdowns Temu+ builds from your own data.',
104      'screens.c1t': 'Order breakdown',
105      'screens.c1d': 'One bundled total, pulled apart line by line — so you see the real cash you paid, with credit kept separate.',
106      'screens.c2t': 'Refund alerts',
107      'screens.c2d': 'Price adjustments you can claim inside Temu’s window, plus items whose return window is closing soon — each with the refund you’d get and an honest “Temu decides” note.',
108
109      'pricing.eyebrow': 'Pricing',
110      'pricing.h2': 'Simple, honest pricing',
111      'pricing.sub': 'The core stays free. Pro is a yearly license you renew yourself — no auto-charges.',
112      'pricing.freeTitle': 'Lite',
113      'pricing.freeSub': 'Free forever. No account required.',
114      'pricing.freeLi1': 'Full honest dashboard',
115      'pricing.freeLi2': 'Real per-item cost &amp; credit ledger',
116      'pricing.freeLi3': 'Wallet, coupons &amp; private mode',
117      'pricing.freeLi4': 'CSV / JSON export &amp; import',
118      'pricing.freeLi5': 'Single Temu account',
119      'pricing.freeCta': 'Add to Chrome — free',
120      'pricing.proBadge': 'Founder price',
121      'pricing.proTitle': 'Pro',
122      'pricing.perYear': '/ year · VAT included',
123      'pricing.proSub': '<strong>Founder price while Pro is new</strong>
123 — <strong>rate-locked</strong> for as long as you keep renewing. Manual annual renewal, no auto-charges; it keeps working as Temu changes.',
124      'pricing.proLi1': 'Everything in Lite',
125      'pricing.proLi2': 'Multiple accounts',
126      'pricing.proLi3': 'Reseller',
127      'pricing.proLi4': 'Refund alerts — price adjustments &amp; closing returns',
128      'pricing.proLi5': 'Arriving today',
129      'pricing.proLi6': 'Use on up to 3 devices — for the whole household',
130      'pricing.proLi7': 'Priority support',
131      'pricing.proLi8': 'Price tracker',
132      'pricing.proLi9': 'Dark mode',
133      'pricing.proCta': 'Get Pro — €5/year',
134      'pricing.proHelp': 'How to install &amp; activate →',
135      'pricing.guarantee': '<strong>14-day money-back guarantee.</strong> Try Pro for two weeks and get a full refund — no questions asked. Payments and refunds are handled by <a href="https://www.lemonsqueezy.com/">Lemon Squeezy</a>, our merchant of record.',
136
137      'browsers.strip': 'Works on Chrome &amp; Edge',
138      'browsers.eyebrow': 'Your browser',
139      'browsers.h2': 'Works on your browser',
140      'browsers.sub': 'Lite is one click on the Chrome Web Store. On Edge, the full build — with Pro — installs as an auto-updating add-on from the Edge Add-ons store, or do a manual install on any Chromium browser.',
141      'browsers.chrome': 'One-click Lite from the <a href="https://chromewebstore.google.com/detail/iehnodlgkoimdohpcjjlhhfehblcfaea" target="_blank" rel="noopener">Chrome Web Store</a>. For Pro, install the full build manually. Brave, Opera and Vivaldi work the same way.',
142      'browsers.edge': 'Install the auto-updating Temu+ add-on — including Pro — straight from the <a href="https://microsoftedge.microsoft.com/addons/detail/icghgpfdgbajbmegpjehihndfflfaako" target="_blank" rel="noopener">Edge Add-ons store</a>. You can also add Lite from the Chrome Web Store.',
143      'browsers.firefox': 'Not yet — Firefox support is on the roadmap.',
144      'browsers.soon': 'Soon',
145      'browsers.cta': 'See full install steps',
146
147      'privacy.eyebrow': 'Privacy by design',
148      'privacy.h2': 'Your data never leaves your browser.',
149      'privacy.body': 'Temu+ reads only your own Temu account data while you’re signed in, and stores everything in a local database on your device. There is no Temu+ server, no account, and no telemetry. We literally cannot see your orders.',
150      'privacy.link': 'Read the full privacy policy →',
151
152      'guides.eyebrow': 'Tips &amp; tricks',
153      'guides.h2': 'Learn to shop Temu like you know the receipts',
154      'guides.sub': 'Plain-English guides on real prices, store credit, getting refunds, and getting more from Temu+.',
155      'guides.k1': 'Buyer guide <span class="read">· 7 min read</span>',
156      'guides.t1': 'How to shop smart on Temu',
157      'guides.d1': 'Read prices that mean something, use coupons and credit the right way, and ignore the fake MSRP discount.',
158      'guides.more': 'Read the guide →',
159      'guides.k2': 'Plans <span class="read">· 4 min read</span>',
160      'guides.t2': 'Temu+ Lite vs Pro',
161      'guides.d2': 'Everything that’s free in Lite, what Pro adds, and how to decide — side by side.',
162      'guides.more2': 'Compare the plans →',
163      'guides.k3': 'Money back <span class="read">· 6 min read</span>',
164      'guides.t3': 'Getting your money back on Temu',
165      'guides.d3': 'Claim the difference when a price drops, and catch items whose return window is about to close — what Refund alerts surfaces for you.',
166      'guides.more3': 'Read the guide →',
167      'guides.all': 'Browse all guides',
168
169      'faq.h2': 'Frequently asked',
170      'faq.q1': 'Is Temu+ available yet?',
171      'faq.a1': 'Yes. <strong>Lite is live free on the Chrome Web Store</strong>, and <strong>Pro is available now</strong> at €5/year. Install the full build — on Edge it’s a one-click, auto-updating add-on from the Edge Add-ons store, and for Chrome you download it from us — then activate your license. See <a href="guides/how-to-get-pro.html">How to get Pro</a>.',
172      'faq.q2': 'Is Temu+ affiliated with Temu?',
173      'faq.a2': 'No. Temu+ is an independent tool built by a third-party developer. It is not affiliated with, endorsed by, or sponsored by Temu or PDD Holdings. It reads only your own account data, on your own device.',
174      'faq.q3': 'Are price-drop refunds guaranteed?',
175      'faq.a3': 'No. Temu+ shows Temu’s own calculated price-adjustment amount for eligible items inside the refund window, but you still submit the claim and Temu approves every request. Treat it as claimable, not a guaranteed promise.',
176      'faq.q4': 'How much is it and how does billing work?',
177      'faq.a4': 'The core is free forever. Pro is <strong>€5/year</strong> at the founder price — an annual license you renew manually, with no automatic recurring charge. Payment is handled by Lemon Squeezy, our merchant of record, who also handle VAT/tax — the €5 is VAT-inclusive, so nothing is added at checkout. You get a license key to activate Pro in the extension.',
178      'faq.q5': 'Can I get a refund?',
179      'faq.a5': 'Yes — there’s a 14-day money-back guarantee. See our <a href="refund.html">refund policy</a> for details.',
180      'faq.q6': 'Where do I find my license key?',
181      'faq.a6': 'Your license key is in the purchase confirmation email from Lemon Squeezy (search your inbox for “Temu+ Pro” or “Lemon Squeezy”), and on the order receipt linked in that email. Can’t find it? Email <a href="mailto:[email protected]">[email protected]</a> from the address you bought with and we’ll resend it. A Pro license works on up to 3 devices — enough for the whole household. Use “Remove license from this device” in the extension before switching devices to free a slot. If you ever hit the limit (reinstalling the extension or clearing your browser data can use one up), just email us and we’ll reset it for you.',
182      'faq.q7': 'What data do you collect?',
183      'faq.a7': 'None on our side. All processing happens locally in your browser, stored in IndexedDB on your device. Nothing is transmitted to any server we control. See the <a href="privacy.html">privacy policy</a>.',
184      'faq.q8': 'Which browsers are supported?',
185      'faq.a8': 'Chrome works today: the free Lite build is in the Web Store, and Pro installs as the full build via manual download. On Edge, the full build is a one-click, auto-updating add-on in the Edge Add-ons store. Firefox is on the roadmap.',
186
187      'footer.features': 'Features',
188      'footer.pricing': 'Pricing',
189      'footer.guides': 'Guides',
190      'footer.privacy': 'Privacy',
191      'footer.terms': 'Terms',
192      'footer.refunds': 'Refunds',
193      'footer.contact': 'Contact',
194      'footer.disclaimer': 'Not affiliated with, endorsed by, or sponsored by Temu or PDD Holdings. “Temu” is a trademark of its respective owner. Temu+ reads only your own account data, processed locally on your device.',
195      'footer.legal': 'Operated by <strong>Naska-IT</strong> — sole proprietorship registered in Serbia · Matični broj 64294105 · PIB 109597755 · Ćirinci 60, Gornji Striževac, 18330 Babušnica, Serbia',
196      'footer.copy': '© 2026 Naska-IT. All rights reserved.'
197    }
198  };
199
200  // Other-language catalogues live in i18n-translations.js (loaded first), which
201  // sets window.I18N_ADD = { sr: {…}, de: {…}, … }. Each is a flat { key: value }
202  // object merged onto STRINGS[lang]. Missing keys still fall back to English.
203  var ADD = (typeof window !== 'undefined' && window.I18N_ADD) ? window.I18N_ADD : null;
204  if (ADD) {
205    for (var lc in ADD) {
206      if (Object.prototype.hasOwnProperty.call(ADD, lc)) STRINGS[lc] = ADD[lc];
207    }
208  }
209
210  // === Engine ==============================================================
211  function detect() {
212    var o = null;
213    try { o = localStorage.getItem(KEY); } catch (e) { /* private mode */ }
214    if (o && LANGS.indexOf(o) >= 0) return o;
215    var n = (navigator.language || 'en').toLowerCase().split('-')[0];
216    return LANGS.indexOf(n) >= 0 ? n : 'en';
217  }
218
219  function tr(lang, key) {
220    var tbl = STRINGS[lang] || {};
221    var v = tbl[key];
222    return v != null ? v : STRINGS.en[key];
223  }
224
225  function apply(lang) {
226    document.documentElement.lang = lang;
227    var nodes = document.querySelectorAll('[data-i18n]');
228    for (var i = 0; i < nodes.length; i++) {
229      var el = nodes[i];
230      var v = tr(lang, el.getAttribute('data-i18n'));
231      if (v != null) el.innerHTML = v;
232    }
233    var title = tr(lang, 'meta.title');
234    if (title) document.title = title;
235    var sel = document.querySelector('.lang-select');
236    if (sel) sel.value = lang;
237  }
238
239  function setLang(lang) {
240    if (LANGS.indexOf(lang) < 0) lang = 'en';
241    try { localStorage.setItem(KEY, lang); } catch (e) { /* in-memory only */ }
242    apply(lang);
243  }
244
245  function buildSelect() {
246    var sel = document.querySelector('.lang-select');
247    if (!sel || sel.options.length) return sel; // already populated in markup
248    for (var i = 0; i < LANGS.length; i++) {
249      var opt = document.createElement('option');
250      opt.value = LANGS[i];
251      opt.textContent = NAMES[LANGS[i]];
252      sel.appendChild(opt);
253    }
254    return sel;
255  }
256
257  function init() {
258    var sel = buildSelect();
259    if (sel) sel.addEventListener('change', function () { setLang(this.value); });
260    apply(detect());
261  }
262
263  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', init);
264  else init();
265
266  window.TplusI18n = { setLang: setLang, lang: detect, langs: LANGS, names: NAMES };
267})();

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.