@seliseblocks/mailcraft 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/DOCS.md +557 -0
- package/LICENSE +21 -0
- package/README.md +126 -0
- package/dist/mailcraft-editor.bundle.js +519 -0
- package/dist/mailcraft-editor.bundle.js.map +7 -0
- package/examples/templates/activate-your-account.html +54 -0
- package/examples/templates/back-in-stock.html +63 -0
- package/examples/templates/cart-left-behind.html +74 -0
- package/examples/templates/community-giveaway.html +81 -0
- package/examples/templates/frontend-futures-invite.html +69 -0
- package/examples/templates/give-25-get-25.html +69 -0
- package/examples/templates/invoice-paid.html +77 -0
- package/examples/templates/meet-nova-launch.html +69 -0
- package/examples/templates/mega-weekend-sale.html +57 -0
- package/examples/templates/order-confirmed.html +80 -0
- package/examples/templates/rate-your-headphones.html +71 -0
- package/examples/templates/reset-your-password.html +54 -0
- package/examples/templates/thankyou-promo-code.html +68 -0
- package/examples/templates/the-sunday-brief.html +47 -0
- package/examples/templates/welcome-to-your-workspace.html +62 -0
- package/examples/templates/your-order-shipped.html +74 -0
- package/examples/templates/your-password-was-changed.html +58 -0
- package/examples/templates/your-signin-code.html +58 -0
- package/examples/vanilla.html +1574 -0
- package/package.json +66 -0
- package/src/core/accent.js +194 -0
- package/src/core/assets.js +15 -0
- package/src/core/binder.js +119 -0
- package/src/core/blocks.js +256 -0
- package/src/core/css-cascade.js +117 -0
- package/src/core/editor-core.js +1492 -0
- package/src/core/export.js +58 -0
- package/src/core/footer.js +73 -0
- package/src/core/i18n/ar.js +177 -0
- package/src/core/i18n/bg.js +152 -0
- package/src/core/i18n/bn.js +176 -0
- package/src/core/i18n/ca.js +152 -0
- package/src/core/i18n/cs.js +152 -0
- package/src/core/i18n/da.js +152 -0
- package/src/core/i18n/de-CH.js +152 -0
- package/src/core/i18n/de.js +152 -0
- package/src/core/i18n/dz.js +179 -0
- package/src/core/i18n/el.js +152 -0
- package/src/core/i18n/en.js +269 -0
- package/src/core/i18n/es.js +152 -0
- package/src/core/i18n/et.js +152 -0
- package/src/core/i18n/fi.js +152 -0
- package/src/core/i18n/fr.js +152 -0
- package/src/core/i18n/hr.js +152 -0
- package/src/core/i18n/hu.js +152 -0
- package/src/core/i18n/index.js +83 -0
- package/src/core/i18n/it.js +152 -0
- package/src/core/i18n/lt.js +152 -0
- package/src/core/i18n/lv.js +152 -0
- package/src/core/i18n/nb.js +152 -0
- package/src/core/i18n/nl.js +152 -0
- package/src/core/i18n/pl.js +152 -0
- package/src/core/i18n/pt.js +152 -0
- package/src/core/i18n/ro.js +152 -0
- package/src/core/i18n/ru.js +152 -0
- package/src/core/i18n/sk.js +152 -0
- package/src/core/i18n/sl.js +152 -0
- package/src/core/i18n/sv.js +152 -0
- package/src/core/i18n/tables.js +50 -0
- package/src/core/i18n/tr.js +152 -0
- package/src/core/i18n/uk.js +152 -0
- package/src/core/icons.js +235 -0
- package/src/core/ids.js +1 -0
- package/src/core/import-html.js +959 -0
- package/src/core/layout-style.js +115 -0
- package/src/core/parse.js +10 -0
- package/src/core/placeholder.js +15 -0
- package/src/core/sanitize.js +141 -0
- package/src/core/storage-limits.js +184 -0
- package/src/core/storage.js +85 -0
- package/src/core/theme.js +1 -0
- package/src/core/toolbar.js +67 -0
- package/src/core/variables.js +11 -0
- package/src/create-editor.js +109 -0
- package/src/index.js +9 -0
- package/src/mailcraft-editor.js +1862 -0
- package/src/render/block-body.js +295 -0
- package/src/render/canvas.js +284 -0
- package/src/render/fields.js +609 -0
- package/src/render/focus-preserve.js +158 -0
- package/src/render/rte.js +212 -0
- package/src/render/screenshot.js +132 -0
- package/src/render/story.js +415 -0
- package/src/render/style.js +452 -0
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/** Hungarian (Magyar) — `hu`. AI-drafted, not reviewed by a native speaker. Correctable one key at a time via `.messages` overrides. */
|
|
2
|
+
export const HU = {
|
|
3
|
+
'action.undoHint': 'Visszavonás — ⌘Z',
|
|
4
|
+
'action.redoHint': 'Ismétlés — ⌘⇧Z',
|
|
5
|
+
'action.chromeToDark': 'Sötét',
|
|
6
|
+
'action.chromeToLight': 'Világos',
|
|
7
|
+
'action.chromeHint': 'Szerkesztő téma világos / sötét',
|
|
8
|
+
'action.aiCopy': 'Szöveg',
|
|
9
|
+
'action.aiCopyHint': 'Szöveg írása MI-vel',
|
|
10
|
+
'action.code': 'Kód',
|
|
11
|
+
'action.codeHint': 'Nyers HTML szerkesztése élő előnézettel',
|
|
12
|
+
'action.preview': 'Előnézet',
|
|
13
|
+
'action.export': 'Exportálás',
|
|
14
|
+
'device.desktop': 'Asztali',
|
|
15
|
+
'device.desktopHint': 'Asztali szélesség',
|
|
16
|
+
'device.mobile': 'Mobil',
|
|
17
|
+
'device.mobileHint': 'Mobil szélesség',
|
|
18
|
+
'device.dark': 'Sötét',
|
|
19
|
+
'device.darkHint': 'Sötét beérkezőlevelek mód',
|
|
20
|
+
'status.autosaveOn': 'automatikus mentés bekapcsolva',
|
|
21
|
+
'status.saved': 'mentve {time}',
|
|
22
|
+
'status.saveFailed': 'nem mentve — a tárhely megtelt',
|
|
23
|
+
'canvas.meta': '{rows} sor · {blocks} blokk · {width}px',
|
|
24
|
+
'tab.design': 'Stílus',
|
|
25
|
+
'tab.designHint': 'Kijelölés stílusa',
|
|
26
|
+
'tab.blocks': 'Blokkok',
|
|
27
|
+
'tab.blocksHint': 'Tartalomblokkok és változók',
|
|
28
|
+
'tab.rows': 'Szakaszok',
|
|
29
|
+
'tab.rowsHint': 'Szakaszelrendezések és a rajzvászon modellje',
|
|
30
|
+
'tab.files': 'Fájlok',
|
|
31
|
+
'tab.filesHint': 'Erőforrás-könyvtár',
|
|
32
|
+
'tab.layers': 'Struktúra',
|
|
33
|
+
'tab.layersHint': 'A dokumentum szerkezete',
|
|
34
|
+
'tab.theme': 'Téma',
|
|
35
|
+
'tab.themeHint': 'Globális stílusok',
|
|
36
|
+
'tab.data': 'Vált.',
|
|
37
|
+
'tab.dataHint': 'A kódod által biztosított változók',
|
|
38
|
+
'inspector.blockProperties': 'A blokk tulajdonságai',
|
|
39
|
+
'inspector.sectionProperties': 'A szakasz tulajdonságai',
|
|
40
|
+
'inspector.title': 'Vizsgáló',
|
|
41
|
+
'inspector.sectionLabel': 'Szakasz',
|
|
42
|
+
'inspector.nothingSelected': 'Nincs kijelölés',
|
|
43
|
+
'action.duplicateHint': 'Kettőzés — ⌘D',
|
|
44
|
+
'action.deleteHint': 'Törlés — ⌫',
|
|
45
|
+
'inspector.emptyBody':
|
|
46
|
+
'Válassz ki egy sort vagy blokkot a rajzvásznon, hogy itt formázhasd. Húzz blokkokat a <strong style="color: var(--ed-text); font-weight: 600;">Blokkok</strong> fülről; kattints duplán bármely szövegre a helyben szerkesztéshez.',
|
|
47
|
+
'inspector.shortcuts': 'Billentyűparancsok',
|
|
48
|
+
'shortcut.undoRedo': '⌘Z / ⌘⇧Z — visszavonás, ismétlés',
|
|
49
|
+
'shortcut.duplicate': '⌘D — kijelölés kettőzése',
|
|
50
|
+
'shortcut.delete': '⌫ — kijelölés törlése',
|
|
51
|
+
'shortcut.export': '⌘E — HTML exportálása',
|
|
52
|
+
'shortcut.escape': 'ESC — kijelölés megszüntetése, bezárás',
|
|
53
|
+
'blocks.dragHint': 'Húzd a rajzvászonra',
|
|
54
|
+
'blocks.count': '{count} blokk',
|
|
55
|
+
'rows.sectionLayouts': 'Szakaszelrendezések',
|
|
56
|
+
'rows.customMarkup': 'Egyéni kód',
|
|
57
|
+
'rows.htmlRowHint': 'Húzd be, vagy kattints a hozzáadáshoz — egy teljes szélességű sor, amelyet nyers HTML-lel töltesz meg',
|
|
58
|
+
'rows.rawHtmlSection': 'Nyers HTML szakasz',
|
|
59
|
+
'rows.rawHtmlDesc': 'Teljes szélességű szakasz, saját kódod, továbbra is húzható',
|
|
60
|
+
'rows.canvasModel': 'Rajzvászon modellje',
|
|
61
|
+
'rows.modeRowBased': 'Soralapú',
|
|
62
|
+
'rows.modeFreeStack': 'Szabad halmozás',
|
|
63
|
+
'rows.hintRows':
|
|
64
|
+
'Szakaszalapú: először helyezz el egy elrendezést, majd blokkokat az oszlopaiba — minden szakasznak saját háttere, kerete, flex vagy rács beállításai vannak.',
|
|
65
|
+
'rows.hintStack': 'Szabad halmozás: elrendezések nélkül — minden elhelyezett blokk saját teljes szélességű szakasszá válik, sorrendben egymásra halmozva.',
|
|
66
|
+
'files.libraryCount': 'Könyvtár — {count} fájl',
|
|
67
|
+
'files.openManager': 'Fájlkezelő megnyitása',
|
|
68
|
+
'files.dragToCanvas': 'Húzz bármely fájlt közvetlenül a rajzvászonra, hogy képblokként helyezd el.',
|
|
69
|
+
'layers.structure': 'Struktúra',
|
|
70
|
+
'layers.sectionSingle': 'Szakasz',
|
|
71
|
+
'layers.sectionMulti': 'Szakasz · {count} oszlop',
|
|
72
|
+
'layers.blockCount': '{count} blokk',
|
|
73
|
+
'theme.globalStyles': 'Globális stílusok',
|
|
74
|
+
'vars.title': 'Változók',
|
|
75
|
+
'vars.fromCode': '{count} a kódodból',
|
|
76
|
+
'vars.declaredNote': 'Az alkalmazásod deklarálta — a rajzvászon mindig a tokent mutatja, sosem az értéket.',
|
|
77
|
+
'vars.filterPlaceholder': 'Változók szűrése…',
|
|
78
|
+
'vars.insertHint': 'Kattints a kijelölt szövegbe, címsorba vagy gombba való beszúráshoz',
|
|
79
|
+
'vars.insert': 'beszúrás',
|
|
80
|
+
'vars.noMatch': 'Egyetlen változó sem felel meg ennek a szűrőnek.',
|
|
81
|
+
'vars.noneDeclared': 'Az alkalmazásod még nem deklarált változókat.',
|
|
82
|
+
'vars.rteHint': 'Szöveg szerkesztése közben egy változót közvetlenül a beágyazott eszköztár legördülő menüjéből is kiválaszthatsz.',
|
|
83
|
+
'modal.fileManager': 'Fájlkezelő',
|
|
84
|
+
'modal.assetsTitle': 'Erőforrások',
|
|
85
|
+
'modal.replaceImage': 'Kép cseréje',
|
|
86
|
+
'library.searchPlaceholder': 'Fájlok keresése…',
|
|
87
|
+
'action.upload': 'Feltöltés',
|
|
88
|
+
'library.clickToPlace': 'Kattints egy fájlra az elhelyezéshez · vagy húzz egy fájlt a rajzvászonra',
|
|
89
|
+
'library.clickToReplace': 'Kattints egy fájlra a kijelölt kép cseréjéhez',
|
|
90
|
+
'library.storageLabel': '{count} fájl · {size}',
|
|
91
|
+
'library.folders': 'Mappák',
|
|
92
|
+
'library.dropHint': 'Húzz ide képfájlokat a feltöltéshez — vagy használd a Feltöltés gombot.',
|
|
93
|
+
'library.deleteFileHint': 'Fájl törlése',
|
|
94
|
+
'library.del': 'TÖRL',
|
|
95
|
+
'toast.assetDeleted': '{name} törölve',
|
|
96
|
+
'modal.export': 'Exportálás',
|
|
97
|
+
'modal.exportTitle': 'Táblázat alapú e-mail HTML',
|
|
98
|
+
'export.copy': 'Másolás',
|
|
99
|
+
'export.copied': 'Másolva',
|
|
100
|
+
'action.download': 'Letöltés',
|
|
101
|
+
'export.meta': '{kb} KB · táblázatok + soron belüli stílusok · Outlook-biztos szélességek',
|
|
102
|
+
'modal.rawHtmlTitle': 'Nyers HTML, élő előnézet',
|
|
103
|
+
'code.statusEdited': 'Kódnézet — szerkesztve — élő előnézet, még nincs alkalmazva',
|
|
104
|
+
'code.statusSynced': 'Kódnézet — szinkronban a rajzvászonnal',
|
|
105
|
+
'action.reload': 'Újratöltés',
|
|
106
|
+
'action.reloadHint': 'Forrás újratöltése a rajzvászonról',
|
|
107
|
+
'action.applyToCanvas': 'Alkalmazás a rajzvászonra',
|
|
108
|
+
'action.applyToCanvasHint': 'A forrás visszaalakítása szerkeszthető sorokká',
|
|
109
|
+
'action.closeWithoutApplyingHint': 'Bezárás alkalmazás nélkül',
|
|
110
|
+
'code.source': 'Forrás',
|
|
111
|
+
'code.livePreview': 'Élő előnézet',
|
|
112
|
+
'code.liveHtmlPreviewTitle': 'Élő HTML előnézet',
|
|
113
|
+
'code.applyNote':
|
|
114
|
+
'Az alkalmazás minden legfelső szintű táblázatsort egy rajzvászon-sorrá alakít, amelyet továbbra is kijelölhetsz, átrendezhetsz és törölhetsz — a kézzel írt kód sértetlenül éli túl a folyamatot.',
|
|
115
|
+
'code.meta': '{kb} KB · {lines} sor',
|
|
116
|
+
'toast.sourceReloaded': 'A forrás újratöltve a rajzvászonról',
|
|
117
|
+
'toast.sourceAppliedOne': 'Forrás alkalmazva — 1 sor a rajzvásznon',
|
|
118
|
+
'toast.sourceAppliedMany': 'Forrás alkalmazva — {rows} sor a rajzvásznon',
|
|
119
|
+
'toast.parseError': 'Nem sikerült elemezni ezt a HTML-t',
|
|
120
|
+
'modal.copyAssist': 'Szövegíró segéd',
|
|
121
|
+
'modal.draftCopyTitle': 'Szöveg írása ehhez a kampányhoz',
|
|
122
|
+
'ai.goal': 'Cél',
|
|
123
|
+
'ai.tone': 'Hangnem',
|
|
124
|
+
'ai.briefLabel': 'Miről szól ez az e-mail?',
|
|
125
|
+
'ai.briefPlaceholder': 'pl. Őszi kollekció, 15% kedvezmény feliratkozóknak, ingyenes szállítás 150 000 Ft felett',
|
|
126
|
+
'ai.generate': 'Szöveg generálása',
|
|
127
|
+
'ai.writing': 'Írás…',
|
|
128
|
+
'ai.kindHeadline': 'Címsor',
|
|
129
|
+
'ai.kindBody': 'Törzsszöveg',
|
|
130
|
+
'ai.kindButton': 'Gomb szövege',
|
|
131
|
+
'ai.actionInsertHeading': 'Beszúrás címsorként',
|
|
132
|
+
'ai.actionInsertText': 'Beszúrás szövegblokként',
|
|
133
|
+
'ai.actionInsertButton': 'Beszúrás gombként',
|
|
134
|
+
'toast.headingAdded': 'Címsor hozzáadva',
|
|
135
|
+
'toast.textBlockAdded': 'Szövegblokk hozzáadva',
|
|
136
|
+
'toast.buttonAdded': 'Gomb hozzáadva',
|
|
137
|
+
'preview.kickerMobile': 'Előnézet — mobil 375px',
|
|
138
|
+
'preview.kickerDark': 'Előnézet — sötét beérkezőlevelek',
|
|
139
|
+
'preview.kickerDesktop': 'Előnézet — asztali {width}px',
|
|
140
|
+
'action.close': 'Bezárás',
|
|
141
|
+
'toast.duplicated': 'Kettőzve',
|
|
142
|
+
'toast.fileUploadedOne': '1 fájl feltöltve',
|
|
143
|
+
'toast.fileUploadedMany': '{count} fájl feltöltve',
|
|
144
|
+
'toast.imageReplaced': 'Kép kicserélve',
|
|
145
|
+
'toast.imageAdded': 'Kép hozzáadva a rajzvászonhoz',
|
|
146
|
+
'toast.htmlCopied': 'HTML a vágólapra másolva',
|
|
147
|
+
'toast.templateLoaded': '{name} betöltve',
|
|
148
|
+
'toast.snippetDefaultLabel': 'Részlet',
|
|
149
|
+
'toast.snippetInserted': '{name} beszúrva',
|
|
150
|
+
'toast.snippetCopied': '{name} másolva — jelölj ki egy szövegblokkot a beszúráshoz',
|
|
151
|
+
};
|
|
152
|
+
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { EN as ENBase } from './en.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Builds a translator. `overrides` is whatever a host passes as `.messages`
|
|
5
|
+
* on the element -- a host's own table, an imported locale, or both merged
|
|
6
|
+
* via `defineMessages` below.
|
|
7
|
+
*
|
|
8
|
+
* Three deliberate properties:
|
|
9
|
+
* 1. English always resolves. A locale is an overlay, never a replacement,
|
|
10
|
+
* so a partial or missing translation shows English rather than a gap.
|
|
11
|
+
* 2. Params interpolate `{name}`.
|
|
12
|
+
* 3. A truly missing key (not in `overrides`, not in `EN`) renders as the
|
|
13
|
+
* key itself, not an empty string -- a visible `toast.deleted` in the UI
|
|
14
|
+
* is obviously wrong and names the exact key to add, where blank text
|
|
15
|
+
* just looks like a broken build.
|
|
16
|
+
*/
|
|
17
|
+
export function createTranslator(overrides) {
|
|
18
|
+
const table = overrides || {};
|
|
19
|
+
return function t(key, params) {
|
|
20
|
+
const template = table[key] ?? ENBase[key] ?? key;
|
|
21
|
+
if (!params) return template;
|
|
22
|
+
return template.replace(/\{(\w+)\}/g, (whole, name) => (name in params ? String(params[name]) : whole));
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/** Merges a locale over a base, for a host assembling its own table -- the documented way to combine a shipped locale with a few product-specific overrides. */
|
|
27
|
+
export function defineMessages(base, overrides) {
|
|
28
|
+
return Object.assign({}, base, overrides);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/** Keys in `base` that `locale` does not translate. What a translator has left to do. */
|
|
32
|
+
export function missingKeys(locale, base) {
|
|
33
|
+
const source = base || ENBase;
|
|
34
|
+
return Object.keys(source).filter((key) => locale[key] === undefined).sort();
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Every locale that ships, for a host building a language switcher.
|
|
39
|
+
* Metadata only -- no message tables -- so listing the locales never pulls
|
|
40
|
+
* every translation file into a consumer's bundle; a host deep-imports the
|
|
41
|
+
* one it wants, e.g. `mailcraft-editor/src/core/i18n/bn.js`.
|
|
42
|
+
*/
|
|
43
|
+
export const LOCALES = [
|
|
44
|
+
{ tag: 'en', name: 'English' },
|
|
45
|
+
{ tag: 'ar', name: 'Arabic', rtl: true },
|
|
46
|
+
{ tag: 'bn', name: 'Bangla' },
|
|
47
|
+
{ tag: 'dz', name: 'Dzongkha' },
|
|
48
|
+
{ tag: 'bg', name: 'Bulgarian' },
|
|
49
|
+
{ tag: 'ca', name: 'Catalan' },
|
|
50
|
+
{ tag: 'cs', name: 'Czech' },
|
|
51
|
+
{ tag: 'da', name: 'Danish' },
|
|
52
|
+
{ tag: 'de', name: 'German' },
|
|
53
|
+
{ tag: 'de-CH', name: 'Swiss German' },
|
|
54
|
+
{ tag: 'el', name: 'Greek' },
|
|
55
|
+
{ tag: 'es', name: 'Spanish' },
|
|
56
|
+
{ tag: 'et', name: 'Estonian' },
|
|
57
|
+
{ tag: 'fi', name: 'Finnish' },
|
|
58
|
+
{ tag: 'fr', name: 'French' },
|
|
59
|
+
{ tag: 'hr', name: 'Croatian' },
|
|
60
|
+
{ tag: 'hu', name: 'Hungarian' },
|
|
61
|
+
{ tag: 'it', name: 'Italian' },
|
|
62
|
+
{ tag: 'lt', name: 'Lithuanian' },
|
|
63
|
+
{ tag: 'lv', name: 'Latvian' },
|
|
64
|
+
{ tag: 'nb', name: 'Norwegian Bokmål' },
|
|
65
|
+
{ tag: 'nl', name: 'Dutch' },
|
|
66
|
+
{ tag: 'pl', name: 'Polish' },
|
|
67
|
+
{ tag: 'pt', name: 'Portuguese' },
|
|
68
|
+
{ tag: 'ro', name: 'Romanian' },
|
|
69
|
+
{ tag: 'ru', name: 'Russian' },
|
|
70
|
+
{ tag: 'sk', name: 'Slovak' },
|
|
71
|
+
{ tag: 'sl', name: 'Slovenian' },
|
|
72
|
+
{ tag: 'sv', name: 'Swedish' },
|
|
73
|
+
{ tag: 'tr', name: 'Turkish' },
|
|
74
|
+
{ tag: 'uk', name: 'Ukrainian' },
|
|
75
|
+
];
|
|
76
|
+
|
|
77
|
+
/** `true` when the tag is written right to left. Metadata only -- `dir` is still what actually flips the layout. */
|
|
78
|
+
export function isRtl(tag) {
|
|
79
|
+
const entry = LOCALES.find((l) => l.tag === tag);
|
|
80
|
+
return entry ? entry.rtl === true : false;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
export { EN, MESSAGE_KEYS } from './en.js';
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/** Italian (Italiano) — `it`. AI-drafted, not reviewed by a native speaker. Correctable one key at a time via `.messages` overrides. */
|
|
2
|
+
export const IT = {
|
|
3
|
+
'action.undoHint': 'Annulla — ⌘Z',
|
|
4
|
+
'action.redoHint': 'Ripeti — ⌘⇧Z',
|
|
5
|
+
'action.chromeToDark': 'Scuro',
|
|
6
|
+
'action.chromeToLight': 'Chiaro',
|
|
7
|
+
'action.chromeHint': 'Tema dell’editor chiaro / scuro',
|
|
8
|
+
'action.aiCopy': 'Testo',
|
|
9
|
+
'action.aiCopyHint': 'Scrivi il testo con l’IA',
|
|
10
|
+
'action.code': 'Codice',
|
|
11
|
+
'action.codeHint': 'Modifica l’HTML grezzo con anteprima dal vivo',
|
|
12
|
+
'action.preview': 'Anteprima',
|
|
13
|
+
'action.export': 'Esporta',
|
|
14
|
+
'device.desktop': 'Desktop',
|
|
15
|
+
'device.desktopHint': 'Larghezza desktop',
|
|
16
|
+
'device.mobile': 'Mobile',
|
|
17
|
+
'device.mobileHint': 'Larghezza mobile',
|
|
18
|
+
'device.dark': 'Scuro',
|
|
19
|
+
'device.darkHint': 'Posta in arrivo scura',
|
|
20
|
+
'status.autosaveOn': 'salvataggio automatico attivo',
|
|
21
|
+
'status.saved': 'salvato {time}',
|
|
22
|
+
'status.saveFailed': 'non salvato — spazio esaurito',
|
|
23
|
+
'canvas.meta': '{rows} righe · {blocks} blocchi · {width}px',
|
|
24
|
+
'tab.design': 'Stile',
|
|
25
|
+
'tab.designHint': 'Applica stile alla selezione',
|
|
26
|
+
'tab.blocks': 'Blocchi',
|
|
27
|
+
'tab.blocksHint': 'Blocchi di contenuto e variabili',
|
|
28
|
+
'tab.rows': 'Sez.',
|
|
29
|
+
'tab.rowsHint': 'Layout delle sezioni e modello del canvas',
|
|
30
|
+
'tab.files': 'File',
|
|
31
|
+
'tab.filesHint': 'Libreria risorse',
|
|
32
|
+
'tab.layers': 'Struttura',
|
|
33
|
+
'tab.layersHint': 'Struttura del documento',
|
|
34
|
+
'tab.theme': 'Tema',
|
|
35
|
+
'tab.themeHint': 'Stili globali',
|
|
36
|
+
'tab.data': 'Var.',
|
|
37
|
+
'tab.dataHint': 'Variabili fornite dal tuo codice',
|
|
38
|
+
'inspector.blockProperties': 'Proprietà del blocco',
|
|
39
|
+
'inspector.sectionProperties': 'Proprietà della sezione',
|
|
40
|
+
'inspector.title': 'Ispettore',
|
|
41
|
+
'inspector.sectionLabel': 'Sezione',
|
|
42
|
+
'inspector.nothingSelected': 'Nessuna selezione',
|
|
43
|
+
'action.duplicateHint': 'Duplica — ⌘D',
|
|
44
|
+
'action.deleteHint': 'Elimina — ⌫',
|
|
45
|
+
'inspector.emptyBody':
|
|
46
|
+
'Seleziona una riga o un blocco sul canvas per applicarne lo stile qui. Trascina i blocchi dalla scheda <strong style="color: var(--ed-text); font-weight: 600;">Blocchi</strong>; fai doppio clic su un testo per modificarlo direttamente.',
|
|
47
|
+
'inspector.shortcuts': 'Scorciatoie',
|
|
48
|
+
'shortcut.undoRedo': '⌘Z / ⌘⇧Z — annulla, ripeti',
|
|
49
|
+
'shortcut.duplicate': '⌘D — duplica selezione',
|
|
50
|
+
'shortcut.delete': '⌫ — elimina selezione',
|
|
51
|
+
'shortcut.export': '⌘E — esporta HTML',
|
|
52
|
+
'shortcut.escape': 'ESC — deseleziona, chiudi',
|
|
53
|
+
'blocks.dragHint': 'Trascina sul canvas',
|
|
54
|
+
'blocks.count': '{count} blocchi',
|
|
55
|
+
'rows.sectionLayouts': 'Layout delle sezioni',
|
|
56
|
+
'rows.customMarkup': 'Markup personalizzato',
|
|
57
|
+
'rows.htmlRowHint': 'Trascina per inserire, o clicca per aggiungere — una riga a piena larghezza da riempire con HTML grezzo',
|
|
58
|
+
'rows.rawHtmlSection': 'Sezione HTML grezzo',
|
|
59
|
+
'rows.rawHtmlDesc': 'Sezione a piena larghezza, il tuo markup, ancora trascinabile',
|
|
60
|
+
'rows.canvasModel': 'Modello del canvas',
|
|
61
|
+
'rows.modeRowBased': 'Basato su righe',
|
|
62
|
+
'rows.modeFreeStack': 'Pila libera',
|
|
63
|
+
'rows.hintRows':
|
|
64
|
+
'Basato su sezioni: rilascia prima un layout, poi i blocchi nelle sue colonne — ogni sezione ha proprio sfondo, bordo, impostazioni flex o griglia.',
|
|
65
|
+
'rows.hintStack': 'Pila libera: senza layout — ogni blocco rilasciato diventa una propria sezione a piena larghezza, impilata in ordine.',
|
|
66
|
+
'files.libraryCount': 'Libreria — {count} file',
|
|
67
|
+
'files.openManager': 'Apri gestione file',
|
|
68
|
+
'files.dragToCanvas': 'Trascina un qualsiasi file direttamente sul canvas per inserirlo come blocco immagine.',
|
|
69
|
+
'layers.structure': 'Struttura',
|
|
70
|
+
'layers.sectionSingle': 'Sezione',
|
|
71
|
+
'layers.sectionMulti': 'Sezione · {count} col.',
|
|
72
|
+
'layers.blockCount': '{count} bl.',
|
|
73
|
+
'theme.globalStyles': 'Stili globali',
|
|
74
|
+
'vars.title': 'Variabili',
|
|
75
|
+
'vars.fromCode': '{count} dal tuo codice',
|
|
76
|
+
'vars.declaredNote': 'Dichiarate dalla tua applicazione — il canvas mostra sempre il token, mai un valore.',
|
|
77
|
+
'vars.filterPlaceholder': 'Filtra variabili…',
|
|
78
|
+
'vars.insertHint': 'Clicca per inserire nel testo, titolo o pulsante selezionato',
|
|
79
|
+
'vars.insert': 'inserisci',
|
|
80
|
+
'vars.noMatch': 'Nessuna variabile corrisponde a questo filtro.',
|
|
81
|
+
'vars.noneDeclared': 'La tua applicazione non ha ancora dichiarato variabili.',
|
|
82
|
+
'vars.rteHint': 'Durante la modifica del testo puoi anche scegliere una variabile direttamente dal menu della barra degli strumenti in linea.',
|
|
83
|
+
'modal.fileManager': 'Gestione file',
|
|
84
|
+
'modal.assetsTitle': 'Risorse',
|
|
85
|
+
'modal.replaceImage': 'Sostituisci immagine',
|
|
86
|
+
'library.searchPlaceholder': 'Cerca file…',
|
|
87
|
+
'action.upload': 'Carica',
|
|
88
|
+
'library.clickToPlace': 'Clicca su un file per posizionarlo · o trascina un file sul canvas',
|
|
89
|
+
'library.clickToReplace': 'Clicca su un file per sostituire l’immagine selezionata',
|
|
90
|
+
'library.storageLabel': '{count} file · {size}',
|
|
91
|
+
'library.folders': 'Cartelle',
|
|
92
|
+
'library.dropHint': 'Rilascia qui i file immagine per caricarli — oppure usa il pulsante Carica.',
|
|
93
|
+
'library.deleteFileHint': 'Elimina file',
|
|
94
|
+
'library.del': 'ELIM',
|
|
95
|
+
'toast.assetDeleted': '{name} eliminato',
|
|
96
|
+
'modal.export': 'Esporta',
|
|
97
|
+
'modal.exportTitle': 'HTML email basato su tabelle',
|
|
98
|
+
'export.copy': 'Copia',
|
|
99
|
+
'export.copied': 'Copiato',
|
|
100
|
+
'action.download': 'Scarica',
|
|
101
|
+
'export.meta': '{kb} KB · tabelle + stili inline · larghezze sicure per Outlook',
|
|
102
|
+
'modal.rawHtmlTitle': 'HTML grezzo, anteprima dal vivo',
|
|
103
|
+
'code.statusEdited': 'Vista codice — modificato — anteprima dal vivo, non ancora applicato',
|
|
104
|
+
'code.statusSynced': 'Vista codice — sincronizzato con il canvas',
|
|
105
|
+
'action.reload': 'Ricarica',
|
|
106
|
+
'action.reloadHint': 'Ricarica il sorgente dal canvas',
|
|
107
|
+
'action.applyToCanvas': 'Applica al canvas',
|
|
108
|
+
'action.applyToCanvasHint': 'Analizza il sorgente riconvertendolo in righe modificabili',
|
|
109
|
+
'action.closeWithoutApplyingHint': 'Chiudi senza applicare',
|
|
110
|
+
'code.source': 'Sorgente',
|
|
111
|
+
'code.livePreview': 'Anteprima dal vivo',
|
|
112
|
+
'code.liveHtmlPreviewTitle': 'Anteprima HTML dal vivo',
|
|
113
|
+
'code.applyNote':
|
|
114
|
+
'Applica converte ogni riga di tabella di primo livello in una riga del canvas ancora selezionabile, riordinabile ed eliminabile — il markup scritto a mano resta intatto.',
|
|
115
|
+
'code.meta': '{kb} KB · {lines} righe',
|
|
116
|
+
'toast.sourceReloaded': 'Sorgente ricaricato dal canvas',
|
|
117
|
+
'toast.sourceAppliedOne': 'Sorgente applicato — 1 riga sul canvas',
|
|
118
|
+
'toast.sourceAppliedMany': 'Sorgente applicato — {rows} righe sul canvas',
|
|
119
|
+
'toast.parseError': 'Impossibile analizzare questo HTML',
|
|
120
|
+
'modal.copyAssist': 'Assistente di scrittura',
|
|
121
|
+
'modal.draftCopyTitle': 'Scrivi il testo per questa campagna',
|
|
122
|
+
'ai.goal': 'Obiettivo',
|
|
123
|
+
'ai.tone': 'Tono',
|
|
124
|
+
'ai.briefLabel': 'Di cosa parla questa email?',
|
|
125
|
+
'ai.briefPlaceholder': 'es. Collezione autunno, 15% per gli iscritti, spedizione gratuita oltre 150€',
|
|
126
|
+
'ai.generate': 'Genera testo',
|
|
127
|
+
'ai.writing': 'Scrittura in corso…',
|
|
128
|
+
'ai.kindHeadline': 'Titolo',
|
|
129
|
+
'ai.kindBody': 'Corpo del testo',
|
|
130
|
+
'ai.kindButton': 'Testo del pulsante',
|
|
131
|
+
'ai.actionInsertHeading': 'Inserisci come titolo',
|
|
132
|
+
'ai.actionInsertText': 'Inserisci come blocco di testo',
|
|
133
|
+
'ai.actionInsertButton': 'Inserisci come pulsante',
|
|
134
|
+
'toast.headingAdded': 'Titolo aggiunto',
|
|
135
|
+
'toast.textBlockAdded': 'Blocco di testo aggiunto',
|
|
136
|
+
'toast.buttonAdded': 'Pulsante aggiunto',
|
|
137
|
+
'preview.kickerMobile': 'Anteprima — mobile 375px',
|
|
138
|
+
'preview.kickerDark': 'Anteprima — posta scura',
|
|
139
|
+
'preview.kickerDesktop': 'Anteprima — desktop {width}px',
|
|
140
|
+
'action.close': 'Chiudi',
|
|
141
|
+
'toast.duplicated': 'Duplicato',
|
|
142
|
+
'toast.fileUploadedOne': '1 file caricato',
|
|
143
|
+
'toast.fileUploadedMany': '{count} file caricati',
|
|
144
|
+
'toast.imageReplaced': 'Immagine sostituita',
|
|
145
|
+
'toast.imageAdded': 'Immagine aggiunta al canvas',
|
|
146
|
+
'toast.htmlCopied': 'HTML copiato negli appunti',
|
|
147
|
+
'toast.templateLoaded': '{name} caricato',
|
|
148
|
+
'toast.snippetDefaultLabel': 'Snippet',
|
|
149
|
+
'toast.snippetInserted': '{name} inserito',
|
|
150
|
+
'toast.snippetCopied': '{name} copiato — seleziona un blocco di testo per inserirlo',
|
|
151
|
+
};
|
|
152
|
+
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/** Lithuanian (Lietuvių) — `lt`. AI-drafted, not reviewed by a native speaker. Correctable one key at a time via `.messages` overrides. */
|
|
2
|
+
export const LT = {
|
|
3
|
+
'action.undoHint': 'Anuliuoti — ⌘Z',
|
|
4
|
+
'action.redoHint': 'Grąžinti — ⌘⇧Z',
|
|
5
|
+
'action.chromeToDark': 'Tamsi',
|
|
6
|
+
'action.chromeToLight': 'Šviesi',
|
|
7
|
+
'action.chromeHint': 'Redaktoriaus tema šviesi / tamsi',
|
|
8
|
+
'action.aiCopy': 'Tekstas',
|
|
9
|
+
'action.aiCopyHint': 'Parašyti tekstą su DI',
|
|
10
|
+
'action.code': 'Kodas',
|
|
11
|
+
'action.codeHint': 'Redaguoti neapdorotą HTML su tiesioginiu peržiūra',
|
|
12
|
+
'action.preview': 'Peržiūra',
|
|
13
|
+
'action.export': 'Eksportuoti',
|
|
14
|
+
'device.desktop': 'Kompiuteris',
|
|
15
|
+
'device.desktopHint': 'Kompiuterio plotis',
|
|
16
|
+
'device.mobile': 'Mobilusis',
|
|
17
|
+
'device.mobileHint': 'Mobiliojo plotis',
|
|
18
|
+
'device.dark': 'Tamsi',
|
|
19
|
+
'device.darkHint': 'Tamsus pašto dėžutės režimas',
|
|
20
|
+
'status.autosaveOn': 'automatinis išsaugojimas įjungtas',
|
|
21
|
+
'status.saved': 'išsaugota {time}',
|
|
22
|
+
'status.saveFailed': 'neišsaugota — saugykla pilna',
|
|
23
|
+
'canvas.meta': '{rows} eilučių · {blocks} blokų · {width}px',
|
|
24
|
+
'tab.design': 'Stilius',
|
|
25
|
+
'tab.designHint': 'Stilizuoti pasirinkimą',
|
|
26
|
+
'tab.blocks': 'Blokai',
|
|
27
|
+
'tab.blocksHint': 'Turinio blokai ir kintamieji',
|
|
28
|
+
'tab.rows': 'Sekcijos',
|
|
29
|
+
'tab.rowsHint': 'Sekcijų išdėstymai ir drobės modelis',
|
|
30
|
+
'tab.files': 'Failai',
|
|
31
|
+
'tab.filesHint': 'Išteklių biblioteka',
|
|
32
|
+
'tab.layers': 'Struktūra',
|
|
33
|
+
'tab.layersHint': 'Dokumento struktūra',
|
|
34
|
+
'tab.theme': 'Tema',
|
|
35
|
+
'tab.themeHint': 'Globalūs stiliai',
|
|
36
|
+
'tab.data': 'Kint.',
|
|
37
|
+
'tab.dataHint': 'Jūsų kodo pateikti kintamieji',
|
|
38
|
+
'inspector.blockProperties': 'Bloko savybės',
|
|
39
|
+
'inspector.sectionProperties': 'Sekcijos savybės',
|
|
40
|
+
'inspector.title': 'Inspektorius',
|
|
41
|
+
'inspector.sectionLabel': 'Sekcija',
|
|
42
|
+
'inspector.nothingSelected': 'Nieko nepasirinkta',
|
|
43
|
+
'action.duplicateHint': 'Dubliuoti — ⌘D',
|
|
44
|
+
'action.deleteHint': 'Ištrinti — ⌫',
|
|
45
|
+
'inspector.emptyBody':
|
|
46
|
+
'Pasirinkite eilutę arba bloką drobėje, kad čia jį stilizuotumėte. Vilkite blokus iš skirtuko <strong style="color: var(--ed-text); font-weight: 600;">Blokai</strong>; dukart spustelėkite bet kurį tekstą, kad redaguotumėte jį tiesiogiai.',
|
|
47
|
+
'inspector.shortcuts': 'Sparčieji klavišai',
|
|
48
|
+
'shortcut.undoRedo': '⌘Z / ⌘⇧Z — anuliuoti, grąžinti',
|
|
49
|
+
'shortcut.duplicate': '⌘D — dubliuoti pasirinkimą',
|
|
50
|
+
'shortcut.delete': '⌫ — ištrinti pasirinkimą',
|
|
51
|
+
'shortcut.export': '⌘E — eksportuoti HTML',
|
|
52
|
+
'shortcut.escape': 'ESC — panaikinti pasirinkimą, uždaryti',
|
|
53
|
+
'blocks.dragHint': 'Vilkite į drobę',
|
|
54
|
+
'blocks.count': '{count} blokų',
|
|
55
|
+
'rows.sectionLayouts': 'Sekcijų išdėstymai',
|
|
56
|
+
'rows.customMarkup': 'Pasirinktinis kodas',
|
|
57
|
+
'rows.htmlRowHint': 'Vilkite, kad įterptumėte, arba spustelėkite, kad pridėtumėte — pilno pločio eilutę, kurią užpildote neapdorotu HTML',
|
|
58
|
+
'rows.rawHtmlSection': 'Neapdoroto HTML sekcija',
|
|
59
|
+
'rows.rawHtmlDesc': 'Pilno pločio sekcija, jūsų pačių kodas, vis dar vilkiama',
|
|
60
|
+
'rows.canvasModel': 'Drobės modelis',
|
|
61
|
+
'rows.modeRowBased': 'Pagrįsta eilutėmis',
|
|
62
|
+
'rows.modeFreeStack': 'Laisvas krūvinys',
|
|
63
|
+
'rows.hintRows':
|
|
64
|
+
'Pagrįsta sekcijomis: pirmiausia numeskite išdėstymą, tada blokus į jo stulpelius — kiekviena sekcija turi savo foną, kraštinę, flex arba tinklelio nustatymus.',
|
|
65
|
+
'rows.hintStack': 'Laisvas krūvinys: be išdėstymų — kiekvienas numestas blokas tampa savo pilno pločio sekcija, sudėta iš eilės.',
|
|
66
|
+
'files.libraryCount': 'Biblioteka — {count} failų',
|
|
67
|
+
'files.openManager': 'Atidaryti failų tvarkyklę',
|
|
68
|
+
'files.dragToCanvas': 'Vilkite bet kurį failą tiesiai į drobę, kad jį padėtumėte kaip vaizdo bloką.',
|
|
69
|
+
'layers.structure': 'Struktūra',
|
|
70
|
+
'layers.sectionSingle': 'Sekcija',
|
|
71
|
+
'layers.sectionMulti': 'Sekcija · {count} stulpelių',
|
|
72
|
+
'layers.blockCount': '{count} bl.',
|
|
73
|
+
'theme.globalStyles': 'Globalūs stiliai',
|
|
74
|
+
'vars.title': 'Kintamieji',
|
|
75
|
+
'vars.fromCode': '{count} iš jūsų kodo',
|
|
76
|
+
'vars.declaredNote': 'Deklaruoti jūsų programos — drobė visada rodo žymą, o ne reikšmę.',
|
|
77
|
+
'vars.filterPlaceholder': 'Filtruoti kintamuosius…',
|
|
78
|
+
'vars.insertHint': 'Spustelėkite, kad įterptumėte į pasirinktą tekstą, antraštę ar mygtuką',
|
|
79
|
+
'vars.insert': 'įterpti',
|
|
80
|
+
'vars.noMatch': 'Nė vienas kintamasis neatitinka šio filtro.',
|
|
81
|
+
'vars.noneDeclared': 'Jūsų programa dar nedeklaravo jokių kintamųjų.',
|
|
82
|
+
'vars.rteHint': 'Redaguodami tekstą taip pat galite pasirinkti kintamąjį tiesiai iš įterptos įrankių juostos išskleidžiamojo meniu.',
|
|
83
|
+
'modal.fileManager': 'Failų tvarkyklė',
|
|
84
|
+
'modal.assetsTitle': 'Ištekliai',
|
|
85
|
+
'modal.replaceImage': 'Pakeisti vaizdą',
|
|
86
|
+
'library.searchPlaceholder': 'Ieškoti failų…',
|
|
87
|
+
'action.upload': 'Įkelti',
|
|
88
|
+
'library.clickToPlace': 'Spustelėkite failą, kad jį padėtumėte · arba vilkite failą į drobę',
|
|
89
|
+
'library.clickToReplace': 'Spustelėkite failą, kad pakeistumėte pasirinktą vaizdą',
|
|
90
|
+
'library.storageLabel': '{count} failų · {size}',
|
|
91
|
+
'library.folders': 'Aplankai',
|
|
92
|
+
'library.dropHint': 'Numeskite vaizdo failus čia, kad juos įkeltumėte — arba naudokite mygtuką Įkelti.',
|
|
93
|
+
'library.deleteFileHint': 'Ištrinti failą',
|
|
94
|
+
'library.del': 'TRINT',
|
|
95
|
+
'toast.assetDeleted': '{name} ištrintas',
|
|
96
|
+
'modal.export': 'Eksportuoti',
|
|
97
|
+
'modal.exportTitle': 'Lentelėmis pagrįstas el. laiško HTML',
|
|
98
|
+
'export.copy': 'Kopijuoti',
|
|
99
|
+
'export.copied': 'Nukopijuota',
|
|
100
|
+
'action.download': 'Atsisiųsti',
|
|
101
|
+
'export.meta': '{kb} KB · lentelės + įterpti stiliai · Outlook saugūs pločiai',
|
|
102
|
+
'modal.rawHtmlTitle': 'Neapdorotas HTML, tiesioginė peržiūra',
|
|
103
|
+
'code.statusEdited': 'Kodo rodinys — redaguota — peržiūra tiesiogiai, dar netaikyta',
|
|
104
|
+
'code.statusSynced': 'Kodo rodinys — sinchronizuota su drobe',
|
|
105
|
+
'action.reload': 'Įkelti iš naujo',
|
|
106
|
+
'action.reloadHint': 'Įkelti šaltinį iš naujo iš drobės',
|
|
107
|
+
'action.applyToCanvas': 'Taikyti drobei',
|
|
108
|
+
'action.applyToCanvasHint': 'Analizuoti šaltinį atgal į redaguojamas eilutes',
|
|
109
|
+
'action.closeWithoutApplyingHint': 'Uždaryti netaikant',
|
|
110
|
+
'code.source': 'Šaltinis',
|
|
111
|
+
'code.livePreview': 'Tiesioginė peržiūra',
|
|
112
|
+
'code.liveHtmlPreviewTitle': 'Tiesioginė HTML peržiūra',
|
|
113
|
+
'code.applyNote':
|
|
114
|
+
'Taikymas analizuoja kiekvieną aukščiausio lygio lentelės eilutę į drobės eilutę, kurią vis dar galite pasirinkti, pertvarkyti ir ištrinti — ranka parašytas kodas išlieka nepakitęs.',
|
|
115
|
+
'code.meta': '{kb} KB · {lines} eilučių',
|
|
116
|
+
'toast.sourceReloaded': 'Šaltinis įkeltas iš naujo iš drobės',
|
|
117
|
+
'toast.sourceAppliedOne': 'Šaltinis pritaikytas — 1 eilutė drobėje',
|
|
118
|
+
'toast.sourceAppliedMany': 'Šaltinis pritaikytas — {rows} eilučių drobėje',
|
|
119
|
+
'toast.parseError': 'Nepavyko išanalizuoti šio HTML',
|
|
120
|
+
'modal.copyAssist': 'Teksto asistentas',
|
|
121
|
+
'modal.draftCopyTitle': 'Parašyti tekstą šiai kampanijai',
|
|
122
|
+
'ai.goal': 'Tikslas',
|
|
123
|
+
'ai.tone': 'Tonas',
|
|
124
|
+
'ai.briefLabel': 'Apie ką šis el. laiškas?',
|
|
125
|
+
'ai.briefPlaceholder': 'pvz., Rudens kolekcija, 15 % prenumeratoriams, nemokamas pristatymas nuo 150 €',
|
|
126
|
+
'ai.generate': 'Generuoti tekstą',
|
|
127
|
+
'ai.writing': 'Rašoma…',
|
|
128
|
+
'ai.kindHeadline': 'Antraštė',
|
|
129
|
+
'ai.kindBody': 'Pagrindinis tekstas',
|
|
130
|
+
'ai.kindButton': 'Mygtuko tekstas',
|
|
131
|
+
'ai.actionInsertHeading': 'Įterpti kaip antraštę',
|
|
132
|
+
'ai.actionInsertText': 'Įterpti kaip teksto bloką',
|
|
133
|
+
'ai.actionInsertButton': 'Įterpti kaip mygtuką',
|
|
134
|
+
'toast.headingAdded': 'Antraštė pridėta',
|
|
135
|
+
'toast.textBlockAdded': 'Teksto blokas pridėtas',
|
|
136
|
+
'toast.buttonAdded': 'Mygtukas pridėtas',
|
|
137
|
+
'preview.kickerMobile': 'Peržiūra — mobilusis 375px',
|
|
138
|
+
'preview.kickerDark': 'Peržiūra — tamsi pašto dėžutė',
|
|
139
|
+
'preview.kickerDesktop': 'Peržiūra — kompiuteris {width}px',
|
|
140
|
+
'action.close': 'Uždaryti',
|
|
141
|
+
'toast.duplicated': 'Sudubliuota',
|
|
142
|
+
'toast.fileUploadedOne': 'Įkeltas 1 failas',
|
|
143
|
+
'toast.fileUploadedMany': 'Įkelta failų: {count}',
|
|
144
|
+
'toast.imageReplaced': 'Vaizdas pakeistas',
|
|
145
|
+
'toast.imageAdded': 'Vaizdas pridėtas į drobę',
|
|
146
|
+
'toast.htmlCopied': 'HTML nukopijuotas į iškarpinę',
|
|
147
|
+
'toast.templateLoaded': '{name} įkeltas',
|
|
148
|
+
'toast.snippetDefaultLabel': 'Iškarpa',
|
|
149
|
+
'toast.snippetInserted': '{name} įterptas',
|
|
150
|
+
'toast.snippetCopied': '{name} nukopijuotas — pasirinkite teksto bloką, kad jį įterptumėte',
|
|
151
|
+
};
|
|
152
|
+
|