@jjlmoya/utils-developer 1.30.0 → 1.32.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/package.json +70 -70
- package/src/category/i18n/en.ts +1 -1
- package/src/category/i18n/es.ts +1 -1
- package/src/category/index.ts +2 -1
- package/src/category/seo.astro +1 -1
- package/src/components/PreviewNavSidebar.astro +1 -1
- package/src/components/PreviewToolbar.astro +1 -1
- package/src/data.ts +1 -1
- package/src/entries.ts +2 -0
- package/src/env.d.ts +1 -1
- package/src/index.ts +1 -0
- package/src/layouts/PreviewLayout.astro +1 -1
- package/src/pages/[locale]/[slug].astro +161 -161
- package/src/pages/index.astro +1 -1
- package/src/tests/bibliography_wellformed_export.test.ts +46 -0
- package/src/tests/category_seo_quality.test.ts +76 -0
- package/src/tests/entry_contract.test.ts +8 -2
- package/src/tests/faq_count.test.ts +1 -1
- package/src/tests/i18n_coverage.test.ts +2 -6
- package/src/tests/inverted_punctuation.test.ts +113 -113
- package/src/tests/locale_completeness.test.ts +1 -1
- package/src/tests/mocks/astro_mock.js +1 -1
- package/src/tests/no_h1_in_components.test.ts +1 -1
- package/src/tests/promote_this_website_i18n.test.ts +33 -0
- package/src/tests/seo_translation_completeness.test.ts +69 -0
- package/src/tests/seo_wellformed_export.test.ts +65 -0
- package/src/tests/slug_language_code_format.test.ts +25 -25
- package/src/tests/slug_uniqueness.test.ts +86 -86
- package/src/tests/tool_validation.test.ts +16 -16
- package/src/tool/aspectRatio/i18n/de.ts +164 -164
- package/src/tool/aspectRatio/i18n/ja.ts +1 -1
- package/src/tool/aspectRatio/i18n/ko.ts +1 -1
- package/src/tool/aspectRatio/i18n/pl.ts +164 -164
- package/src/tool/aspectRatio/i18n/ru.ts +164 -164
- package/src/tool/aspectRatio/i18n/zh.ts +165 -165
- package/src/tool/aspectRatio/seo.astro +15 -15
- package/src/tool/calculadoraTiempoDatos/i18n/de.ts +143 -143
- package/src/tool/calculadoraTiempoDatos/i18n/ja.ts +1 -1
- package/src/tool/calculadoraTiempoDatos/i18n/ko.ts +1 -1
- package/src/tool/calculadoraTiempoDatos/i18n/pl.ts +143 -143
- package/src/tool/calculadoraTiempoDatos/i18n/ru.ts +144 -144
- package/src/tool/calculadoraTiempoDatos/i18n/sv.ts +143 -143
- package/src/tool/calculadoraTiempoDatos/i18n/zh.ts +144 -144
- package/src/tool/calculadoraTiempoDatos/seo.astro +15 -15
- package/src/tool/colorConverter/i18n/de.ts +120 -120
- package/src/tool/colorConverter/i18n/ja.ts +1 -1
- package/src/tool/colorConverter/i18n/ko.ts +1 -1
- package/src/tool/colorConverter/i18n/ru.ts +120 -120
- package/src/tool/colorConverter/i18n/zh.ts +1 -1
- package/src/tool/colorConverter/seo.astro +15 -15
- package/src/tool/conversorExcelCsvHtml/i18n/ja.ts +1 -1
- package/src/tool/conversorExcelCsvHtml/i18n/ko.ts +1 -1
- package/src/tool/conversorExcelCsvHtml/i18n/pl.ts +124 -124
- package/src/tool/conversorExcelCsvHtml/i18n/ru.ts +124 -124
- package/src/tool/conversorExcelCsvHtml/i18n/zh.ts +125 -125
- package/src/tool/conversorExcelCsvHtml/seo.astro +15 -15
- package/src/tool/cronGenerator/i18n/ja.ts +1 -1
- package/src/tool/cronGenerator/i18n/ko.ts +1 -1
- package/src/tool/cronGenerator/i18n/zh.ts +183 -183
- package/src/tool/cronGenerator/seo.astro +15 -15
- package/src/tool/cssSpecificityCalculator/i18n/ja.ts +1 -1
- package/src/tool/cssSpecificityCalculator/i18n/ko.ts +1 -1
- package/src/tool/cssSpecificityCalculator/i18n/zh.ts +1 -1
- package/src/tool/cssSpecificityCalculator/seo.astro +15 -15
- package/src/tool/cssToInlineConverter/i18n/ja.ts +1 -1
- package/src/tool/cssToInlineConverter/i18n/ko.ts +1 -1
- package/src/tool/cssToInlineConverter/i18n/zh.ts +1 -1
- package/src/tool/cssToInlineConverter/seo.astro +15 -15
- package/src/tool/dualOsIconPreview/assets/day-check.webp +0 -0
- package/src/tool/dualOsIconPreview/assets/fast-task.webp +0 -0
- package/src/tool/dualOsIconPreview/assets/fortune-cookie.webp +0 -0
- package/src/tool/dualOsIconPreview/assets/lexi-crash.webp +0 -0
- package/src/tool/dualOsIconPreview/assets/pizzametrics.webp +0 -0
- package/src/tool/dualOsIconPreview/assets/sauce-lab.webp +0 -0
- package/src/tool/dualOsIconPreview/assets/vesp.webp +0 -0
- package/src/tool/dualOsIconPreview/bibliography.astro +6 -0
- package/src/tool/dualOsIconPreview/bibliography.ts +7 -0
- package/src/tool/dualOsIconPreview/component.astro +117 -0
- package/src/tool/dualOsIconPreview/controller.ts +157 -0
- package/src/tool/dualOsIconPreview/dom-views.ts +82 -0
- package/src/tool/dualOsIconPreview/dual-ios-android-app-icon-preview.css +861 -0
- package/src/tool/dualOsIconPreview/entry.ts +31 -0
- package/src/tool/dualOsIconPreview/evaluator.ts +20 -0
- package/src/tool/dualOsIconPreview/i18n/de.ts +56 -0
- package/src/tool/dualOsIconPreview/i18n/en.ts +46 -0
- package/src/tool/dualOsIconPreview/i18n/es.ts +56 -0
- package/src/tool/dualOsIconPreview/i18n/fr.ts +56 -0
- package/src/tool/dualOsIconPreview/i18n/id.ts +56 -0
- package/src/tool/dualOsIconPreview/i18n/it.ts +56 -0
- package/src/tool/dualOsIconPreview/i18n/ja.ts +56 -0
- package/src/tool/dualOsIconPreview/i18n/ko.ts +56 -0
- package/src/tool/dualOsIconPreview/i18n/nl.ts +56 -0
- package/src/tool/dualOsIconPreview/i18n/pl.ts +56 -0
- package/src/tool/dualOsIconPreview/i18n/pt.ts +56 -0
- package/src/tool/dualOsIconPreview/i18n/ru.ts +56 -0
- package/src/tool/dualOsIconPreview/i18n/sv.ts +56 -0
- package/src/tool/dualOsIconPreview/i18n/tr.ts +43 -0
- package/src/tool/dualOsIconPreview/i18n/zh.ts +43 -0
- package/src/tool/dualOsIconPreview/index.ts +11 -0
- package/src/tool/dualOsIconPreview/logic.test.ts +63 -0
- package/src/tool/dualOsIconPreview/logic.ts +135 -0
- package/src/tool/dualOsIconPreview/seo.astro +15 -0
- package/src/tool/dualOsIconPreview/storage.ts +18 -0
- package/src/tool/dualOsIconPreview/ui.ts +52 -0
- package/src/tool/duplicateCssRemover/i18n/ja.ts +1 -1
- package/src/tool/duplicateCssRemover/i18n/ko.ts +1 -1
- package/src/tool/duplicateCssRemover/i18n/zh.ts +1 -1
- package/src/tool/duplicateCssRemover/seo.astro +15 -15
- package/src/tool/generadorSecurityTxt/i18n/ja.ts +1 -1
- package/src/tool/generadorSecurityTxt/i18n/ko.ts +1 -1
- package/src/tool/generadorSecurityTxt/i18n/zh.ts +1 -1
- package/src/tool/generadorSecurityTxt/seo.astro +15 -15
- package/src/tool/hashGenerator/i18n/ja.ts +1 -1
- package/src/tool/hashGenerator/i18n/ko.ts +1 -1
- package/src/tool/hashGenerator/seo.astro +15 -15
- package/src/tool/inspectorCertificadosSsl/i18n/ja.ts +1 -1
- package/src/tool/inspectorCertificadosSsl/i18n/ko.ts +1 -1
- package/src/tool/inspectorCertificadosSsl/i18n/zh.ts +1 -1
- package/src/tool/inspectorCertificadosSsl/seo.astro +15 -15
- package/src/tool/jsonFormatter/seo.astro +15 -15
- package/src/tool/jwtDecoder/i18n/es.ts +248 -248
- package/src/tool/jwtDecoder/i18n/fr.ts +248 -248
- package/src/tool/jwtDecoder/i18n/tr.ts +248 -248
- package/src/tool/keycode/seo.astro +15 -15
- package/src/tool/llmCostCalculator/i18n/fr.ts +149 -149
- package/src/tool/llmCostCalculator/i18n/ja.ts +1 -1
- package/src/tool/llmCostCalculator/i18n/ko.ts +1 -1
- package/src/tool/llmCostCalculator/seo.astro +15 -15
- package/src/tool/mobileMockupGenerator/i18n/ja.ts +1 -1
- package/src/tool/mobileMockupGenerator/i18n/ko.ts +1 -1
- package/src/tool/mobileMockupGenerator/i18n/zh.ts +1 -1
- package/src/tool/mobileMockupGenerator/seo.astro +15 -15
- package/src/tool/musicalTypography/i18n/ja.ts +1 -1
- package/src/tool/musicalTypography/i18n/ko.ts +1 -1
- package/src/tool/musicalTypography/i18n/zh.ts +1 -1
- package/src/tool/musicalTypography/seo.astro +15 -15
- package/src/tool/placeholderGenerator/i18n/ja.ts +1 -1
- package/src/tool/placeholderGenerator/i18n/ko.ts +1 -1
- package/src/tool/placeholderGenerator/i18n/zh.ts +1 -1
- package/src/tool/placeholderGenerator/seo.astro +15 -15
- package/src/tool/promoteThisWebsite/entry.ts +13 -0
- package/src/tool/promoteThisWebsite/i18n/de.ts +95 -0
- package/src/tool/promoteThisWebsite/i18n/fr.ts +95 -0
- package/src/tool/promoteThisWebsite/i18n/id.ts +95 -0
- package/src/tool/promoteThisWebsite/i18n/it.ts +95 -0
- package/src/tool/promoteThisWebsite/i18n/ja.ts +95 -0
- package/src/tool/promoteThisWebsite/i18n/ko.ts +95 -0
- package/src/tool/promoteThisWebsite/i18n/nl.ts +95 -0
- package/src/tool/promoteThisWebsite/i18n/pl.ts +95 -0
- package/src/tool/promoteThisWebsite/i18n/pt.ts +95 -0
- package/src/tool/promoteThisWebsite/i18n/ru.ts +95 -0
- package/src/tool/promoteThisWebsite/i18n/sv.ts +95 -0
- package/src/tool/promoteThisWebsite/i18n/tr.ts +95 -0
- package/src/tool/promoteThisWebsite/i18n/zh.ts +95 -0
- package/src/tool/promptLibrary/i18n/ja.ts +1 -1
- package/src/tool/promptLibrary/i18n/ko.ts +1 -1
- package/src/tool/promptLibrary/i18n/zh.ts +1 -1
- package/src/tool/promptLibrary/seo.astro +15 -15
- package/src/tool/readabilityCalculator/i18n/ja.ts +1 -1
- package/src/tool/readabilityCalculator/i18n/ko.ts +1 -1
- package/src/tool/readabilityCalculator/i18n/zh.ts +1 -1
- package/src/tool/readabilityCalculator/seo.astro +15 -15
- package/src/tool/serpPixelSimulator/entry.ts +30 -30
- package/src/tool/serpPixelSimulator/i18n/en.ts +211 -211
- package/src/tool/serpPixelSimulator/i18n/fr.ts +214 -214
- package/src/tool/serpPixelSimulator/i18n/ru.ts +214 -214
- package/src/tool/serpPixelSimulator/logic.ts +18 -18
- package/src/tool/serpPixelSimulator/serp-pixel-simulator.css +195 -195
- package/src/tool/svgSanitizer/i18n/ja.ts +1 -1
- package/src/tool/svgSanitizer/i18n/ko.ts +1 -1
- package/src/tool/svgSanitizer/seo.astro +15 -15
- package/src/tool/svgToCss/i18n/ja.ts +1 -1
- package/src/tool/svgToCss/i18n/ko.ts +1 -1
- package/src/tool/svgToCss/seo.astro +15 -15
- package/src/tool/urlCleaner/i18n/ja.ts +1 -1
- package/src/tool/urlCleaner/i18n/ko.ts +1 -1
- package/src/tool/urlCleaner/i18n/zh.ts +1 -1
- package/src/tool/urlCleaner/seo.astro +15 -15
- package/src/tool/urlEncoderDecoder/i18n/es.ts +146 -146
- package/src/tool/urlEncoderDecoder/i18n/ko.ts +1 -1
- package/src/tool/urlEncoderDecoder/seo.astro +15 -15
- package/src/tool/utmGenerator/i18n/ja.ts +1 -1
- package/src/tool/utmGenerator/i18n/ko.ts +1 -1
- package/src/tool/utmGenerator/i18n/zh.ts +1 -1
- package/src/tool/utmGenerator/seo.astro +15 -15
- package/src/tools.ts +2 -1
- package/src/types.ts +1 -1
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import type { FAQPage, HowTo, SoftwareApplication, WithContext } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { PromoteThisWebsiteUI } from '../ui';
|
|
4
|
+
import { bibliography } from '../bibliography';
|
|
5
|
+
|
|
6
|
+
const localized = {
|
|
7
|
+
slug: 'promouvoir-ce-site',
|
|
8
|
+
title: 'Promouvoir ce site',
|
|
9
|
+
description: "Le bureau de propagande interne de jjlmoya.es en espagnol et de GameBob.dev a l'international. Transforme les captures de tes propres pages en images sociales avant que Bob ne trouve le fil genant.",
|
|
10
|
+
faqTitle: 'Promouvoir ce site sans fâcher le chat',
|
|
11
|
+
bibliographyTitle: "Pages de l'operation",
|
|
12
|
+
faq: [
|
|
13
|
+
{ question: 'À qui sert vraiment cet outil ?', answer: "À promouvoir les pages jjlmoya.es en espagnol et GameBob.dev à l'international. Les autres peuvent regarder par la fenêtre." },
|
|
14
|
+
{ question: 'Puis-je coller une capture directement ?', answer: "Oui. Copie une capture puis appuie sur Ctrl+V. Elle devient la couche de l'outil, car même le comité félin accepte les preuves au bon format." },
|
|
15
|
+
{ question: 'Que se passe-t-il avec une URL de production ?', answer: "L'outil lit le titre meta, choisit la bonne marque et charge l'image Open Graph. Le slug n'aura finalement pas de promotion." },
|
|
16
|
+
{ question: 'Pourquoi deux marques ?', answer: "jjlmoya.es est la page espagnole et GameBob.dev la page internationale. Les chats s'en moquent complètement." },
|
|
17
|
+
{ question: 'Mes images sont-elles envoyées ?', answer: 'Non. Elles restent dans le navigateur et la composition est rendue localement. Seul le PNG que tu télécharges volontairement sort de la page.' },
|
|
18
|
+
],
|
|
19
|
+
howTo: [
|
|
20
|
+
{ name: 'Coller une capture', text: 'Colle avec Ctrl+V une capture de jjlmoya.es ou GameBob.dev. Le comité demande des preuves venues de son propre empire.' },
|
|
21
|
+
{ name: 'Choisir la marque', text: "Choisis jjlmoya.es pour l'espagnol ou GameBob.dev pour la page internationale. Le chat possède déjà les lieux." },
|
|
22
|
+
{ name: "Composer l'image", text: "Déplace la capture, le titre, le logo, le fond et la mascotte jusqu'à obtenir une composition volontaire." },
|
|
23
|
+
{ name: 'Exporter le PNG', text: 'Télécharge le PNG aux dimensions voulues avant que Bob ne réclame le mérite.' },
|
|
24
|
+
],
|
|
25
|
+
seoTitle: 'Le bureau officiel de propagande de jjlmoya et GameBob',
|
|
26
|
+
seoIntro: "Ce n'est pas un compositeur social générique pour quelqu'un qui vient de découvrir le mot branding. Il sert à promouvoir nos pages jjlmoya.es et GameBob.dev pendant que les chats surveillent le travail.",
|
|
27
|
+
seoBody: "Colle une vraie capture ou charge une URL de production. L'outil lit le titre de la page au lieu de deviner depuis le slug et garde l'image Open Graph visible pendant que le décor se met en place.",
|
|
28
|
+
seoTip: "Commence avec une URL de jjlmoya.es ou GameBob.dev. Si le titre, la marque ou l'image ne se chargent pas, le comité accusera le réseau, puis l'humain, puis les chats.",
|
|
29
|
+
};
|
|
30
|
+
const ui: PromoteThisWebsiteUI = {
|
|
31
|
+
urlLabel: 'URL du site', urlPlaceholder: 'https://www.example.com/outils/exemple/', applyUrl: 'Appliquer',
|
|
32
|
+
formatLabel: 'Format', panoramic: 'Panoramique · 1536 × 1024', instagram: 'Instagram · 1080 × 1350', square: 'Carré · 1080 × 1080', story: 'Story · 1080 × 1920',
|
|
33
|
+
titleLabel: 'Titre', titlePlaceholder: "Un titre court pour l'image", titleSizeLabel: 'Taille de police du titre', titleBoxSizeLabel: 'Taille du cadre du titre', titleStyleLabel: 'Style du titre',
|
|
34
|
+
brandLabel: 'Marque', brandStyleLabel: 'Style de la marque', advancedLabel: 'Composition avancée', assetsLabel: 'Ressources', backgroundLabel: 'Arrière-plan', toolLabel: "Capture de l'outil", logoLabel: 'Logo', mascotLabel: 'Mascotte',
|
|
35
|
+
layersLabel: 'Calques', backgroundLayer: 'Arrière-plan', toolLayer: 'Outil', logoLayer: 'Logo', mascotLayer: 'Mascotte', titleLayer: 'Titre', reset: 'Réinitialiser', download: 'Télécharger le PNG', activeLayer: 'Calque actif',
|
|
36
|
+
canvasHint: "Fais glisser les calques directement sur la zone de travail. Colle une capture avec Ctrl+V.", pasted: "Capture collée comme calque de l'outil.", urlApplied: 'URL appliquée. Ajuste le titre et ajoute la capture à promouvoir.', urlLoading: 'Lecture du titre de la page et de son image officielle...', urlFailed: "Impossible de lire cette page. Vérifie l'URL ou ajoute les ressources manuellement.", fileLoaded: 'Ressource chargée.',
|
|
37
|
+
titlePaper: 'Papier éditorial', titleRibbon: 'Ruban plié', titleInk: "Éclaboussure d'encre", titlePoster: 'Affiche nocturne', titleTicket: 'Billet découpé', titleMarker: 'Soulignement matériel', titleSplit: 'Bloc partagé', titleCapsule: 'Capsule minimale', titleCorner: 'Coin éditorial', titleVertical: 'Accent vertical',
|
|
38
|
+
brandPlain: 'Marque simple', brandPlaque: 'Plaque en céramique', brandTicket: "Billet d'entrée", brandStamp: 'Tampon en caoutchouc', brandNeon: 'Enseigne au néon', brandRibbon: 'Ruban signal', brandCorner: 'Coin éditorial', brandPixel: 'Bloc pixel', brandHalo: 'Halo doux', brandEditorial: 'Ligne éditoriale', defaultTool: 'Colle la capture de ton outil',
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
42
|
+
'@context': 'https://schema.org',
|
|
43
|
+
'@type': 'FAQPage',
|
|
44
|
+
mainEntity: localized.faq.map((item) => ({
|
|
45
|
+
'@type': 'Question',
|
|
46
|
+
name: item.question,
|
|
47
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
48
|
+
})),
|
|
49
|
+
};
|
|
50
|
+
const howToSchema: WithContext<HowTo> = {
|
|
51
|
+
'@context': 'https://schema.org',
|
|
52
|
+
'@type': 'HowTo',
|
|
53
|
+
name: localized.title,
|
|
54
|
+
description: localized.description,
|
|
55
|
+
step: localized.howTo.map((step, index) => ({
|
|
56
|
+
'@type': 'HowToStep',
|
|
57
|
+
position: index + 1,
|
|
58
|
+
name: step.name,
|
|
59
|
+
text: step.text,
|
|
60
|
+
})),
|
|
61
|
+
};
|
|
62
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
63
|
+
'@context': 'https://schema.org',
|
|
64
|
+
'@type': 'SoftwareApplication',
|
|
65
|
+
name: localized.title,
|
|
66
|
+
description: localized.description,
|
|
67
|
+
applicationCategory: 'DeveloperApplication',
|
|
68
|
+
operatingSystem: 'Any',
|
|
69
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
70
|
+
inLanguage: 'fr',
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
export const content: ToolLocaleContent<PromoteThisWebsiteUI> = {
|
|
74
|
+
slug: localized.slug,
|
|
75
|
+
title: localized.title,
|
|
76
|
+
description: localized.description,
|
|
77
|
+
ui,
|
|
78
|
+
faqTitle: localized.faqTitle,
|
|
79
|
+
faq: localized.faq,
|
|
80
|
+
bibliographyTitle: localized.bibliographyTitle,
|
|
81
|
+
bibliography,
|
|
82
|
+
howTo: localized.howTo,
|
|
83
|
+
schemas: [appSchema, faqSchema, howToSchema],
|
|
84
|
+
seo: [
|
|
85
|
+
{ type: 'title', text: localized.seoTitle, level: 2 },
|
|
86
|
+
{ type: 'paragraph', html: localized.seoIntro },
|
|
87
|
+
{ type: 'stats', columns: 3, items: [{ value: '2', label: ui.brandLabel, icon: 'mdi:domain' }, { value: '4', label: ui.formatLabel, icon: 'mdi:crop' }, { value: '0', label: ui.activeLayer, icon: 'mdi:cat' }] },
|
|
88
|
+
{ type: 'title', text: localized.title, level: 3 },
|
|
89
|
+
{ type: 'paragraph', html: localized.seoBody },
|
|
90
|
+
{ type: 'title', text: localized.faqTitle, level: 3 },
|
|
91
|
+
{ type: 'paragraph', html: localized.seoBody },
|
|
92
|
+
{ type: 'table', headers: [ui.toolLayer, ui.titleLayer, ui.brandLabel], rows: [[ui.toolLabel, ui.titleLabel, ui.logoLabel]] },
|
|
93
|
+
{ type: 'tip', title: localized.faqTitle, html: localized.seoTip },
|
|
94
|
+
],
|
|
95
|
+
};
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import type { FAQPage, HowTo, SoftwareApplication, WithContext } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { PromoteThisWebsiteUI } from '../ui';
|
|
4
|
+
import { bibliography } from '../bibliography';
|
|
5
|
+
|
|
6
|
+
const localized = {
|
|
7
|
+
slug: 'promosikan-situs-ini',
|
|
8
|
+
title: 'Promosikan situs ini',
|
|
9
|
+
description: 'Meja propaganda internal untuk jjlmoya.es dalam bahasa Spanyol dan GameBob.dev secara internasional. Ubah tangkapan layar halaman sendiri menjadi gambar sosial sebelum Bob menganggap feed ini memalukan.',
|
|
10
|
+
faqTitle: 'Promosikan situs ini tanpa membuat kucing marah',
|
|
11
|
+
bibliographyTitle: 'Halaman dalam operasi',
|
|
12
|
+
faq: [
|
|
13
|
+
{ question: 'Sebenarnya alat ini untuk siapa?', answer: 'Untuk mempromosikan halaman jjlmoya.es dalam bahasa Spanyol dan GameBob.dev secara internasional. Yang lain boleh melihat dari jendela.' },
|
|
14
|
+
{ question: 'Bisakah saya menempelkan tangkapan layar?', answer: 'Bisa. Salin tangkapan layar lalu tekan Ctrl+V. Tangkapan itu menjadi lapisan alat karena dewan kucing menerima bukti dalam format yang benar.' },
|
|
15
|
+
{ question: 'Apa yang terjadi saat URL produksi ditempel?', answer: 'Alat membaca judul meta, memilih merek yang sesuai, lalu memuat gambar Open Graph. Slug akhirnya tidak mendapat promosi.' },
|
|
16
|
+
{ question: 'Mengapa ada dua merek?', answer: 'jjlmoya.es adalah halaman Spanyol dan GameBob.dev adalah halaman internasional. Kucing sama sekali tidak peduli.' },
|
|
17
|
+
{ question: 'Apakah gambar saya diunggah?', answer: 'Tidak. Gambar tetap di browser dan komposisi dirender secara lokal. Hanya PNG yang sengaja Anda unduh yang keluar.' },
|
|
18
|
+
],
|
|
19
|
+
howTo: [
|
|
20
|
+
{ name: 'Tempel tangkapan layar', text: 'Tempel tangkapan dari jjlmoya.es atau GameBob.dev dengan Ctrl+V. Dewan meminta bukti dari kerajaannya sendiri.' },
|
|
21
|
+
{ name: 'Pilih merek', text: 'Pilih jjlmoya.es untuk bahasa Spanyol atau GameBob.dev untuk halaman internasional. Kucing sudah memiliki tempatnya.' },
|
|
22
|
+
{ name: 'Susun gambar', text: 'Seret tangkapan, judul, logo, latar belakang, dan maskot sampai komposisinya terlihat sengaja dibuat.' },
|
|
23
|
+
{ name: 'Ekspor PNG', text: 'Unduh PNG dengan ukuran pilihan sebelum Bob mengambil semua pujian.' },
|
|
24
|
+
],
|
|
25
|
+
seoTitle: 'Meja propaganda resmi untuk jjlmoya dan GameBob',
|
|
26
|
+
seoIntro: 'Ini bukan komposer media sosial generik untuk orang yang baru menemukan kata branding. Alat ini dibuat untuk mempromosikan halaman kami di jjlmoya.es dan GameBob.dev sementara kucing mengawasi.',
|
|
27
|
+
seoBody: 'Tempel tangkapan layar nyata atau muat URL produksi. Alat membaca judul halaman, bukan menebak dari slug, lalu mempertahankan gambar Open Graph tetap terlihat saat lapisan lain ditata.',
|
|
28
|
+
seoTip: 'Mulai dengan URL dari jjlmoya.es atau GameBob.dev. Jika judul, merek, atau gambar gagal dimuat, dewan akan menyalahkan jaringan, manusia, lalu kucing.',
|
|
29
|
+
};
|
|
30
|
+
const ui: PromoteThisWebsiteUI = {
|
|
31
|
+
urlLabel: 'URL situs', urlPlaceholder: 'https://www.example.com/tools/contoh/', applyUrl: 'Terapkan',
|
|
32
|
+
formatLabel: 'Format', panoramic: 'Panorama · 1536 × 1024', instagram: 'Instagram · 1080 × 1350', square: 'Persegi · 1080 × 1080', story: 'Story · 1080 × 1920',
|
|
33
|
+
titleLabel: 'Judul', titlePlaceholder: 'Judul singkat untuk gambar', titleSizeLabel: 'Ukuran font judul', titleBoxSizeLabel: 'Ukuran kotak judul', titleStyleLabel: 'Gaya judul',
|
|
34
|
+
brandLabel: 'Merek', brandStyleLabel: 'Gaya merek', advancedLabel: 'Komposisi lanjutan', assetsLabel: 'Aset', backgroundLabel: 'Latar belakang', toolLabel: 'Tangkapan layar alat', logoLabel: 'Logo', mascotLabel: 'Maskot',
|
|
35
|
+
layersLabel: 'Lapisan', backgroundLayer: 'Latar belakang', toolLayer: 'Alat', logoLayer: 'Logo', mascotLayer: 'Maskot', titleLayer: 'Judul', reset: 'Atur ulang', download: 'Unduh PNG', activeLayer: 'Lapisan aktif',
|
|
36
|
+
canvasHint: 'Seret lapisan langsung di kanvas. Tempel tangkapan layar dengan Ctrl+V.', pasted: 'Tangkapan layar ditempel sebagai lapisan alat.', urlApplied: 'URL diterapkan. Sesuaikan judul dan tambahkan tangkapan yang ingin dipromosikan.', urlLoading: 'Membaca judul halaman dan gambar resminya...', urlFailed: 'Halaman itu tidak dapat dibaca. Periksa URL atau tambahkan aset secara manual.', fileLoaded: 'Aset dimuat.',
|
|
37
|
+
titlePaper: 'Kertas editorial', titleRibbon: 'Pita terlipat', titleInk: 'Percikan tinta', titlePoster: 'Poster malam', titleTicket: 'Tiket sobek', titleMarker: 'Garis bawah material', titleSplit: 'Blok terbelah', titleCapsule: 'Kapsul minimal', titleCorner: 'Sudut editorial', titleVertical: 'Aksen vertikal',
|
|
38
|
+
brandPlain: 'Merek sederhana', brandPlaque: 'Plakat keramik', brandTicket: 'Tiket masuk', brandStamp: 'Stempel karet', brandNeon: 'Papan neon', brandRibbon: 'Pita sinyal', brandCorner: 'Sudut editorial', brandPixel: 'Blok piksel', brandHalo: 'Halo lembut', brandEditorial: 'Garis editorial', defaultTool: 'Tempel tangkapan alatmu',
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
42
|
+
'@context': 'https://schema.org',
|
|
43
|
+
'@type': 'FAQPage',
|
|
44
|
+
mainEntity: localized.faq.map((item) => ({
|
|
45
|
+
'@type': 'Question',
|
|
46
|
+
name: item.question,
|
|
47
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
48
|
+
})),
|
|
49
|
+
};
|
|
50
|
+
const howToSchema: WithContext<HowTo> = {
|
|
51
|
+
'@context': 'https://schema.org',
|
|
52
|
+
'@type': 'HowTo',
|
|
53
|
+
name: localized.title,
|
|
54
|
+
description: localized.description,
|
|
55
|
+
step: localized.howTo.map((step, index) => ({
|
|
56
|
+
'@type': 'HowToStep',
|
|
57
|
+
position: index + 1,
|
|
58
|
+
name: step.name,
|
|
59
|
+
text: step.text,
|
|
60
|
+
})),
|
|
61
|
+
};
|
|
62
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
63
|
+
'@context': 'https://schema.org',
|
|
64
|
+
'@type': 'SoftwareApplication',
|
|
65
|
+
name: localized.title,
|
|
66
|
+
description: localized.description,
|
|
67
|
+
applicationCategory: 'DeveloperApplication',
|
|
68
|
+
operatingSystem: 'Any',
|
|
69
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
70
|
+
inLanguage: 'id',
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
export const content: ToolLocaleContent<PromoteThisWebsiteUI> = {
|
|
74
|
+
slug: localized.slug,
|
|
75
|
+
title: localized.title,
|
|
76
|
+
description: localized.description,
|
|
77
|
+
ui,
|
|
78
|
+
faqTitle: localized.faqTitle,
|
|
79
|
+
faq: localized.faq,
|
|
80
|
+
bibliographyTitle: localized.bibliographyTitle,
|
|
81
|
+
bibliography,
|
|
82
|
+
howTo: localized.howTo,
|
|
83
|
+
schemas: [appSchema, faqSchema, howToSchema],
|
|
84
|
+
seo: [
|
|
85
|
+
{ type: 'title', text: localized.seoTitle, level: 2 },
|
|
86
|
+
{ type: 'paragraph', html: localized.seoIntro },
|
|
87
|
+
{ type: 'stats', columns: 3, items: [{ value: '2', label: ui.brandLabel, icon: 'mdi:domain' }, { value: '4', label: ui.formatLabel, icon: 'mdi:crop' }, { value: '0', label: ui.activeLayer, icon: 'mdi:cat' }] },
|
|
88
|
+
{ type: 'title', text: localized.title, level: 3 },
|
|
89
|
+
{ type: 'paragraph', html: localized.seoBody },
|
|
90
|
+
{ type: 'title', text: localized.faqTitle, level: 3 },
|
|
91
|
+
{ type: 'paragraph', html: localized.seoBody },
|
|
92
|
+
{ type: 'table', headers: [ui.toolLayer, ui.titleLayer, ui.brandLabel], rows: [[ui.toolLabel, ui.titleLabel, ui.logoLabel]] },
|
|
93
|
+
{ type: 'tip', title: localized.faqTitle, html: localized.seoTip },
|
|
94
|
+
],
|
|
95
|
+
};
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import type { FAQPage, HowTo, SoftwareApplication, WithContext } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { PromoteThisWebsiteUI } from '../ui';
|
|
4
|
+
import { bibliography } from '../bibliography';
|
|
5
|
+
|
|
6
|
+
const localized = {
|
|
7
|
+
slug: 'promuovi-questo-sito',
|
|
8
|
+
title: 'Promuovi questo sito',
|
|
9
|
+
description: 'Il banco propaganda interno di jjlmoya.es in spagnolo e GameBob.dev a livello internazionale. Trasforma gli screenshot delle tue pagine in immagini social prima che Bob trovi il feed imbarazzante.',
|
|
10
|
+
faqTitle: 'Promuovi questo sito senza far arrabbiare il gatto',
|
|
11
|
+
bibliographyTitle: "Pagine dell'operazione",
|
|
12
|
+
faq: [
|
|
13
|
+
{ question: 'Per chi è davvero questo strumento?', answer: 'Per promuovere le pagine di jjlmoya.es in spagnolo e GameBob.dev a livello internazionale. Gli altri possono guardare dalla finestra.' },
|
|
14
|
+
{ question: 'Posso incollare direttamente uno screenshot?', answer: 'Sì. Copia uno screenshot e premi Ctrl+V. Diventa il livello dello strumento: anche il consiglio felino accetta le prove nel formato giusto.' },
|
|
15
|
+
{ question: 'Cosa succede con un URL di produzione?', answer: "Lo strumento legge il titolo meta, sceglie il marchio corretto e carica l'immagine Open Graph. Lo slug finalmente non viene promosso." },
|
|
16
|
+
{ question: 'Perché ci sono due marchi?', answer: 'jjlmoya.es è la pagina spagnola e GameBob.dev quella internazionale. Ai gatti non interessa affatto.' },
|
|
17
|
+
{ question: 'Le mie immagini vengono caricate?', answer: 'No. Restano nel browser e la composizione viene renderizzata localmente. Esce solo il PNG che scarichi consapevolmente.' },
|
|
18
|
+
],
|
|
19
|
+
howTo: [
|
|
20
|
+
{ name: 'Incolla uno screenshot', text: 'Incolla con Ctrl+V uno screenshot di jjlmoya.es o GameBob.dev. Il consiglio vuole prove dal proprio impero.' },
|
|
21
|
+
{ name: 'Scegli il marchio', text: 'Scegli jjlmoya.es per lo spagnolo o GameBob.dev per la pagina internazionale. Il gatto possiede già i locali.' },
|
|
22
|
+
{ name: "Componi l'immagine", text: 'Sposta screenshot, titolo, logo, sfondo e mascotte finché la composizione sembra intenzionale.' },
|
|
23
|
+
{ name: 'Esporta il PNG', text: 'Scarica il PNG nelle dimensioni desiderate prima che Bob si prenda il merito.' },
|
|
24
|
+
],
|
|
25
|
+
seoTitle: 'Il banco propaganda ufficiale di jjlmoya e GameBob',
|
|
26
|
+
seoIntro: 'Non è un compositore social generico per chi ha appena scoperto la parola branding. Serve a promuovere le nostre pagine jjlmoya.es e GameBob.dev mentre i gatti supervisionano.',
|
|
27
|
+
seoBody: "Incolla uno screenshot reale o carica un URL di produzione. Lo strumento legge il titolo della pagina invece di indovinarlo dallo slug e mantiene visibile l'immagine Open Graph durante la composizione.",
|
|
28
|
+
seoTip: "Inizia con un URL di jjlmoya.es o GameBob.dev. Se titolo, marchio o immagine non vengono caricati, il consiglio accuserà la rete, poi l'uomo e infine i gatti.",
|
|
29
|
+
};
|
|
30
|
+
const ui: PromoteThisWebsiteUI = {
|
|
31
|
+
urlLabel: 'URL del sito', urlPlaceholder: 'https://www.example.com/strumenti/esempio/', applyUrl: 'Applica',
|
|
32
|
+
formatLabel: 'Formato', panoramic: 'Panoramico · 1536 × 1024', instagram: 'Instagram · 1080 × 1350', square: 'Quadrato · 1080 × 1080', story: 'Storia · 1080 × 1920',
|
|
33
|
+
titleLabel: 'Titolo', titlePlaceholder: "Un titolo breve per l'immagine", titleSizeLabel: 'Dimensione del carattere del titolo', titleBoxSizeLabel: 'Dimensione del riquadro del titolo', titleStyleLabel: 'Stile del titolo',
|
|
34
|
+
brandLabel: 'Marchio', brandStyleLabel: 'Stile del marchio', advancedLabel: 'Composizione avanzata', assetsLabel: 'Risorse', backgroundLabel: 'Sfondo', toolLabel: 'Screenshot dello strumento', logoLabel: 'Logo', mascotLabel: 'Mascotte',
|
|
35
|
+
layersLabel: 'Livelli', backgroundLayer: 'Sfondo', toolLayer: 'Strumento', logoLayer: 'Logo', mascotLayer: 'Mascotte', titleLayer: 'Titolo', reset: 'Ripristina', download: 'Scarica PNG', activeLayer: 'Livello attivo',
|
|
36
|
+
canvasHint: 'Trascina i livelli direttamente sulla tela. Incolla uno screenshot con Ctrl+V.', pasted: 'Screenshot incollato come livello dello strumento.', urlApplied: 'URL applicato. Regola il titolo e aggiungi lo screenshot da promuovere.', urlLoading: 'Lettura del titolo della pagina e della sua immagine ufficiale...', urlFailed: "Impossibile leggere la pagina. Controlla l'URL o aggiungi le risorse manualmente.", fileLoaded: 'Risorsa caricata.',
|
|
37
|
+
titlePaper: 'Carta editoriale', titleRibbon: 'Nastro piegato', titleInk: "Macchia d'inchiostro", titlePoster: 'Manifesto notturno', titleTicket: 'Biglietto strappato', titleMarker: 'Sottolineatura materica', titleSplit: 'Blocco diviso', titleCapsule: 'Capsula minima', titleCorner: 'Angolo editoriale', titleVertical: 'Accento verticale',
|
|
38
|
+
brandPlain: 'Marchio semplice', brandPlaque: 'Targa in ceramica', brandTicket: "Biglietto d'ingresso", brandStamp: 'Timbro in gomma', brandNeon: 'Insegna al neon', brandRibbon: 'Nastro segnaletico', brandCorner: 'Angolo editoriale', brandPixel: 'Blocco pixel', brandHalo: 'Alone morbido', brandEditorial: 'Linea editoriale', defaultTool: 'Incolla lo screenshot del tuo strumento',
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
42
|
+
'@context': 'https://schema.org',
|
|
43
|
+
'@type': 'FAQPage',
|
|
44
|
+
mainEntity: localized.faq.map((item) => ({
|
|
45
|
+
'@type': 'Question',
|
|
46
|
+
name: item.question,
|
|
47
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
48
|
+
})),
|
|
49
|
+
};
|
|
50
|
+
const howToSchema: WithContext<HowTo> = {
|
|
51
|
+
'@context': 'https://schema.org',
|
|
52
|
+
'@type': 'HowTo',
|
|
53
|
+
name: localized.title,
|
|
54
|
+
description: localized.description,
|
|
55
|
+
step: localized.howTo.map((step, index) => ({
|
|
56
|
+
'@type': 'HowToStep',
|
|
57
|
+
position: index + 1,
|
|
58
|
+
name: step.name,
|
|
59
|
+
text: step.text,
|
|
60
|
+
})),
|
|
61
|
+
};
|
|
62
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
63
|
+
'@context': 'https://schema.org',
|
|
64
|
+
'@type': 'SoftwareApplication',
|
|
65
|
+
name: localized.title,
|
|
66
|
+
description: localized.description,
|
|
67
|
+
applicationCategory: 'DeveloperApplication',
|
|
68
|
+
operatingSystem: 'Any',
|
|
69
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
70
|
+
inLanguage: 'it',
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
export const content: ToolLocaleContent<PromoteThisWebsiteUI> = {
|
|
74
|
+
slug: localized.slug,
|
|
75
|
+
title: localized.title,
|
|
76
|
+
description: localized.description,
|
|
77
|
+
ui,
|
|
78
|
+
faqTitle: localized.faqTitle,
|
|
79
|
+
faq: localized.faq,
|
|
80
|
+
bibliographyTitle: localized.bibliographyTitle,
|
|
81
|
+
bibliography,
|
|
82
|
+
howTo: localized.howTo,
|
|
83
|
+
schemas: [appSchema, faqSchema, howToSchema],
|
|
84
|
+
seo: [
|
|
85
|
+
{ type: 'title', text: localized.seoTitle, level: 2 },
|
|
86
|
+
{ type: 'paragraph', html: localized.seoIntro },
|
|
87
|
+
{ type: 'stats', columns: 3, items: [{ value: '2', label: ui.brandLabel, icon: 'mdi:domain' }, { value: '4', label: ui.formatLabel, icon: 'mdi:crop' }, { value: '0', label: ui.activeLayer, icon: 'mdi:cat' }] },
|
|
88
|
+
{ type: 'title', text: localized.title, level: 3 },
|
|
89
|
+
{ type: 'paragraph', html: localized.seoBody },
|
|
90
|
+
{ type: 'title', text: localized.faqTitle, level: 3 },
|
|
91
|
+
{ type: 'paragraph', html: localized.seoBody },
|
|
92
|
+
{ type: 'table', headers: [ui.toolLayer, ui.titleLayer, ui.brandLabel], rows: [[ui.toolLabel, ui.titleLabel, ui.logoLabel]] },
|
|
93
|
+
{ type: 'tip', title: localized.faqTitle, html: localized.seoTip },
|
|
94
|
+
],
|
|
95
|
+
};
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import type { FAQPage, HowTo, SoftwareApplication, WithContext } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { PromoteThisWebsiteUI } from '../ui';
|
|
4
|
+
import { bibliography } from '../bibliography';
|
|
5
|
+
|
|
6
|
+
const localized = {
|
|
7
|
+
slug: 'promote-this-website',
|
|
8
|
+
title: 'このサイトを宣伝する',
|
|
9
|
+
description: 'スペイン語のjjlmoya.esと国際向けGameBob.devのための社内プロパガンダデスクです。Bobがフィードを恥ずかしいと思う前に、自分のページのスクリーンショットをソーシャル画像に変換します。',
|
|
10
|
+
faqTitle: '猫を怒らせずにこのサイトを宣伝する',
|
|
11
|
+
bibliographyTitle: '作戦対象のページ',
|
|
12
|
+
faq: [
|
|
13
|
+
{ question: 'このツールは誰のためのものですか?', answer: 'スペイン語のjjlmoya.esと国際向けGameBob.devのページを宣伝するためのものです。それ以外の人は窓から見ていてください。' },
|
|
14
|
+
{ question: 'スクリーンショットを直接貼り付けられますか?', answer: 'はい。コピーしてCtrl+Vを押すとツールのレイヤーになります。猫の委員会も正しい形式の証拠なら受け取ります。' },
|
|
15
|
+
{ question: '本番URLを貼るとどうなりますか?', answer: 'ページのメタタイトルを読み、ブランドを選び、Open Graph画像を読み込みます。slugが昇進することはありません。' },
|
|
16
|
+
{ question: 'なぜブランドが2つあるのですか?', answer: 'jjlmoya.esはスペイン語ページ、GameBob.devは国際向けページです。猫たちはその違いを無視します。' },
|
|
17
|
+
{ question: '画像はアップロードされますか?', answer: 'いいえ。画像はブラウザ内に残り、合成もローカルで行われます。外へ出るのは自分でダウンロードしたPNGだけです。' },
|
|
18
|
+
],
|
|
19
|
+
howTo: [
|
|
20
|
+
{ name: 'スクリーンショットを貼る', text: 'jjlmoya.esまたはGameBob.devの画像をCtrl+Vで貼ります。委員会は自分の帝国の証拠を求めています。' },
|
|
21
|
+
{ name: 'ブランドを選ぶ', text: 'スペイン語ならjjlmoya.es、国際向けならGameBob.devを選びます。猫はすでに建物を所有しています。' },
|
|
22
|
+
{ name: '画像を配置する', text: 'スクリーンショット、タイトル、ロゴ、背景、マスコットを意図的に見えるように配置します。' },
|
|
23
|
+
{ name: 'PNGを書き出す', text: 'Bobが手柄を持っていく前に、希望のサイズでPNGをダウンロードします。' },
|
|
24
|
+
],
|
|
25
|
+
seoTitle: 'jjlmoyaとGameBobの公式プロパガンダデスク',
|
|
26
|
+
seoIntro: 'これはbrandingという言葉を覚えたばかりの人向けの一般的なSNS合成ツールではありません。猫が監督する中、jjlmoya.esとGameBob.devのページを宣伝するためのものです。',
|
|
27
|
+
seoBody: '実際のスクリーンショットを貼るか本番URLを読み込みます。slugから推測せずページタイトルを読み、合成中も公式のOpen Graph画像を表示します。',
|
|
28
|
+
seoTip: 'jjlmoya.esまたはGameBob.devの本番URLから始めてください。タイトルやブランドや画像が読み込めなければ、委員会はネット、人間、最後に猫を責めます。',
|
|
29
|
+
};
|
|
30
|
+
const ui: PromoteThisWebsiteUI = {
|
|
31
|
+
urlLabel: 'ウェブサイトURL', urlPlaceholder: 'https://www.example.com/tools/example/', applyUrl: '適用',
|
|
32
|
+
formatLabel: 'フォーマット', panoramic: 'パノラマ · 1536 × 1024', instagram: 'Instagram · 1080 × 1350', square: '正方形 · 1080 × 1080', story: 'ストーリー · 1080 × 1920',
|
|
33
|
+
titleLabel: 'タイトル', titlePlaceholder: '画像に入れる短いタイトル', titleSizeLabel: 'タイトルの文字サイズ', titleBoxSizeLabel: 'タイトル枠のサイズ', titleStyleLabel: 'タイトルデザイン',
|
|
34
|
+
brandLabel: 'ブランド', brandStyleLabel: 'ブランドデザイン', advancedLabel: '高度な合成', assetsLabel: '素材', backgroundLabel: '背景', toolLabel: 'ツールのスクリーンショット', logoLabel: 'ロゴ', mascotLabel: 'マスコット',
|
|
35
|
+
layersLabel: 'レイヤー', backgroundLayer: '背景', toolLayer: 'ツール', logoLayer: 'ロゴ', mascotLayer: 'マスコット', titleLayer: 'タイトル', reset: 'リセット', download: 'PNGをダウンロード', activeLayer: '選択中のレイヤー',
|
|
36
|
+
canvasHint: 'キャンバス上でレイヤーを直接ドラッグできます。Ctrl+Vでスクリーンショットを貼り付けます。', pasted: 'スクリーンショットをツールレイヤーとして貼り付けました。', urlApplied: 'URLを適用しました。タイトルを調整し、宣伝するスクリーンショットを追加してください。', urlLoading: 'ページタイトルと公式画像を読み込んでいます...', urlFailed: 'ページを読み込めませんでした。URLを確認するか素材を手動で追加してください。', fileLoaded: '素材を読み込みました。',
|
|
37
|
+
titlePaper: 'エディトリアルペーパー', titleRibbon: '折りたたみリボン', titleInk: 'インクの飛沫', titlePoster: '夜のポスター', titleTicket: '切符の切れ端', titleMarker: 'マテリアル下線', titleSplit: '分割ブロック', titleCapsule: 'ミニマルカプセル', titleCorner: 'エディトリアルコーナー', titleVertical: '縦アクセント',
|
|
38
|
+
brandPlain: 'プレーンマーク', brandPlaque: 'セラミックプレート', brandTicket: '入場券', brandStamp: 'ラバースタンプ', brandNeon: 'ネオンサイン', brandRibbon: 'シグナルリボン', brandCorner: 'エディトリアルコーナー', brandPixel: 'ピクセルブロック', brandHalo: 'ソフトハロー', brandEditorial: 'エディトリアルライン', defaultTool: 'ツールのスクリーンショットを貼り付け',
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
42
|
+
'@context': 'https://schema.org',
|
|
43
|
+
'@type': 'FAQPage',
|
|
44
|
+
mainEntity: localized.faq.map((item) => ({
|
|
45
|
+
'@type': 'Question',
|
|
46
|
+
name: item.question,
|
|
47
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
48
|
+
})),
|
|
49
|
+
};
|
|
50
|
+
const howToSchema: WithContext<HowTo> = {
|
|
51
|
+
'@context': 'https://schema.org',
|
|
52
|
+
'@type': 'HowTo',
|
|
53
|
+
name: localized.title,
|
|
54
|
+
description: localized.description,
|
|
55
|
+
step: localized.howTo.map((step, index) => ({
|
|
56
|
+
'@type': 'HowToStep',
|
|
57
|
+
position: index + 1,
|
|
58
|
+
name: step.name,
|
|
59
|
+
text: step.text,
|
|
60
|
+
})),
|
|
61
|
+
};
|
|
62
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
63
|
+
'@context': 'https://schema.org',
|
|
64
|
+
'@type': 'SoftwareApplication',
|
|
65
|
+
name: localized.title,
|
|
66
|
+
description: localized.description,
|
|
67
|
+
applicationCategory: 'DeveloperApplication',
|
|
68
|
+
operatingSystem: 'Any',
|
|
69
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
70
|
+
inLanguage: 'ja',
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
export const content: ToolLocaleContent<PromoteThisWebsiteUI> = {
|
|
74
|
+
slug: localized.slug,
|
|
75
|
+
title: localized.title,
|
|
76
|
+
description: localized.description,
|
|
77
|
+
ui,
|
|
78
|
+
faqTitle: localized.faqTitle,
|
|
79
|
+
faq: localized.faq,
|
|
80
|
+
bibliographyTitle: localized.bibliographyTitle,
|
|
81
|
+
bibliography,
|
|
82
|
+
howTo: localized.howTo,
|
|
83
|
+
schemas: [appSchema, faqSchema, howToSchema],
|
|
84
|
+
seo: [
|
|
85
|
+
{ type: 'title', text: localized.seoTitle, level: 2 },
|
|
86
|
+
{ type: 'paragraph', html: localized.seoIntro },
|
|
87
|
+
{ type: 'stats', columns: 3, items: [{ value: '2', label: ui.brandLabel, icon: 'mdi:domain' }, { value: '4', label: ui.formatLabel, icon: 'mdi:crop' }, { value: '0', label: ui.activeLayer, icon: 'mdi:cat' }] },
|
|
88
|
+
{ type: 'title', text: localized.title, level: 3 },
|
|
89
|
+
{ type: 'paragraph', html: localized.seoBody },
|
|
90
|
+
{ type: 'title', text: localized.faqTitle, level: 3 },
|
|
91
|
+
{ type: 'paragraph', html: localized.seoBody },
|
|
92
|
+
{ type: 'table', headers: [ui.toolLayer, ui.titleLayer, ui.brandLabel], rows: [[ui.toolLabel, ui.titleLabel, ui.logoLabel]] },
|
|
93
|
+
{ type: 'tip', title: localized.faqTitle, html: localized.seoTip },
|
|
94
|
+
],
|
|
95
|
+
};
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import type { FAQPage, HowTo, SoftwareApplication, WithContext } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { PromoteThisWebsiteUI } from '../ui';
|
|
4
|
+
import { bibliography } from '../bibliography';
|
|
5
|
+
|
|
6
|
+
const localized = {
|
|
7
|
+
slug: 'promote-this-website',
|
|
8
|
+
title: '이 웹사이트 홍보하기',
|
|
9
|
+
description: '스페인어 jjlmoya.es와 국제용 GameBob.dev를 위한 사내 선전 데스크입니다. Bob이 피드를 부끄러워하기 전에 내 페이지의 스크린샷을 소셜 이미지로 바꿉니다.',
|
|
10
|
+
faqTitle: '고양이를 화나게 하지 않고 웹사이트 홍보하기',
|
|
11
|
+
bibliographyTitle: '작전 관련 페이지',
|
|
12
|
+
faq: [
|
|
13
|
+
{ question: '이 도구는 누구를 위한 것인가요?', answer: '스페인어 jjlmoya.es와 국제용 GameBob.dev 페이지를 홍보하기 위한 도구입니다. 나머지는 창밖에서 구경하면 됩니다.' },
|
|
14
|
+
{ question: '스크린샷을 바로 붙여넣을 수 있나요?', answer: '네. 스크린샷을 복사하고 Ctrl+V를 누르면 도구 레이어가 됩니다. 고양이 위원회도 올바른 형식의 증거는 받습니다.' },
|
|
15
|
+
{ question: '운영 URL을 붙여넣으면 어떻게 되나요?', answer: '페이지 메타 제목을 읽고 브랜드를 선택한 뒤 Open Graph 이미지를 불러옵니다. slug가 승진하는 일은 이제 없습니다.' },
|
|
16
|
+
{ question: '브랜드가 왜 두 개인가요?', answer: 'jjlmoya.es는 스페인어 페이지이고 GameBob.dev는 국제 페이지입니다. 고양이들은 그 차이를 무시합니다.' },
|
|
17
|
+
{ question: '이미지가 업로드되나요?', answer: '아니요. 이미지는 브라우저에 남고 합성은 로컬에서 처리됩니다. 직접 다운로드한 PNG만 페이지 밖으로 나갑니다.' },
|
|
18
|
+
],
|
|
19
|
+
howTo: [
|
|
20
|
+
{ name: '스크린샷 붙여넣기', text: 'jjlmoya.es 또는 GameBob.dev의 스크린샷을 Ctrl+V로 붙여넣습니다. 위원회는 자기 제국의 증거를 요구합니다.' },
|
|
21
|
+
{ name: '브랜드 선택', text: '스페인어는 jjlmoya.es, 국제 페이지는 GameBob.dev를 선택합니다. 고양이는 이미 사무실을 소유하고 있습니다.' },
|
|
22
|
+
{ name: '이미지 배치', text: '스크린샷, 제목, 로고, 배경, 마스코트를 의도적으로 보이도록 배치합니다.' },
|
|
23
|
+
{ name: 'PNG 내보내기', text: 'Bob이 공을 가로채기 전에 원하는 크기로 PNG를 다운로드합니다.' },
|
|
24
|
+
],
|
|
25
|
+
seoTitle: 'jjlmoya와 GameBob의 공식 선전 데스크',
|
|
26
|
+
seoIntro: '이것은 branding이라는 말을 막 배운 사람을 위한 평범한 소셜 이미지 도구가 아닙니다. 고양이가 감독하는 동안 jjlmoya.es와 GameBob.dev 페이지를 홍보하기 위해 존재합니다.',
|
|
27
|
+
seoBody: '실제 스크린샷을 붙여넣거나 운영 URL을 불러오세요. slug로 추측하지 않고 페이지 제목을 읽으며, 합성하는 동안 공식 Open Graph 이미지를 보여줍니다.',
|
|
28
|
+
seoTip: 'jjlmoya.es 또는 GameBob.dev의 운영 URL로 시작하세요. 제목이나 브랜드나 이미지가 로드되지 않으면 위원회는 네트워크, 인간, 마지막으로 고양이를 탓합니다.',
|
|
29
|
+
};
|
|
30
|
+
const ui: PromoteThisWebsiteUI = {
|
|
31
|
+
urlLabel: '웹사이트 URL', urlPlaceholder: 'https://www.example.com/tools/example/', applyUrl: '적용',
|
|
32
|
+
formatLabel: '형식', panoramic: '파노라마 · 1536 × 1024', instagram: 'Instagram · 1080 × 1350', square: '정사각형 · 1080 × 1080', story: '스토리 · 1080 × 1920',
|
|
33
|
+
titleLabel: '제목', titlePlaceholder: '이미지에 넣을 짧은 제목', titleSizeLabel: '제목 글꼴 크기', titleBoxSizeLabel: '제목 상자 크기', titleStyleLabel: '제목 디자인',
|
|
34
|
+
brandLabel: '브랜드', brandStyleLabel: '브랜드 디자인', advancedLabel: '고급 구성', assetsLabel: '에셋', backgroundLabel: '배경', toolLabel: '도구 스크린샷', logoLabel: '로고', mascotLabel: '마스코트',
|
|
35
|
+
layersLabel: '레이어', backgroundLayer: '배경', toolLayer: '도구', logoLayer: '로고', mascotLayer: '마스코트', titleLayer: '제목', reset: '초기화', download: 'PNG 다운로드', activeLayer: '활성 레이어',
|
|
36
|
+
canvasHint: '캔버스에서 레이어를 직접 드래그하세요. Ctrl+V로 스크린샷을 붙여넣을 수 있습니다.', pasted: '스크린샷을 도구 레이어로 붙여넣었습니다.', urlApplied: 'URL을 적용했습니다. 제목을 조정하고 홍보할 스크린샷을 추가하세요.', urlLoading: '페이지 제목과 공식 이미지를 읽는 중...', urlFailed: '페이지를 읽을 수 없습니다. URL을 확인하거나 에셋을 직접 추가하세요.', fileLoaded: '에셋을 불러왔습니다.',
|
|
37
|
+
titlePaper: '에디토리얼 페이퍼', titleRibbon: '접힌 리본', titleInk: '잉크 번짐', titlePoster: '밤의 포스터', titleTicket: '찢은 티켓', titleMarker: '머티리얼 밑줄', titleSplit: '분할 블록', titleCapsule: '미니멀 캡슐', titleCorner: '에디토리얼 코너', titleVertical: '세로 포인트',
|
|
38
|
+
brandPlain: '심플 마크', brandPlaque: '세라믹 명판', brandTicket: '입장권', brandStamp: '고무 도장', brandNeon: '네온사인', brandRibbon: '시그널 리본', brandCorner: '에디토리얼 코너', brandPixel: '픽셀 블록', brandHalo: '부드러운 후광', brandEditorial: '에디토리얼 라인', defaultTool: '도구 스크린샷을 붙여넣으세요',
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
42
|
+
'@context': 'https://schema.org',
|
|
43
|
+
'@type': 'FAQPage',
|
|
44
|
+
mainEntity: localized.faq.map((item) => ({
|
|
45
|
+
'@type': 'Question',
|
|
46
|
+
name: item.question,
|
|
47
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
48
|
+
})),
|
|
49
|
+
};
|
|
50
|
+
const howToSchema: WithContext<HowTo> = {
|
|
51
|
+
'@context': 'https://schema.org',
|
|
52
|
+
'@type': 'HowTo',
|
|
53
|
+
name: localized.title,
|
|
54
|
+
description: localized.description,
|
|
55
|
+
step: localized.howTo.map((step, index) => ({
|
|
56
|
+
'@type': 'HowToStep',
|
|
57
|
+
position: index + 1,
|
|
58
|
+
name: step.name,
|
|
59
|
+
text: step.text,
|
|
60
|
+
})),
|
|
61
|
+
};
|
|
62
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
63
|
+
'@context': 'https://schema.org',
|
|
64
|
+
'@type': 'SoftwareApplication',
|
|
65
|
+
name: localized.title,
|
|
66
|
+
description: localized.description,
|
|
67
|
+
applicationCategory: 'DeveloperApplication',
|
|
68
|
+
operatingSystem: 'Any',
|
|
69
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
70
|
+
inLanguage: 'ko',
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
export const content: ToolLocaleContent<PromoteThisWebsiteUI> = {
|
|
74
|
+
slug: localized.slug,
|
|
75
|
+
title: localized.title,
|
|
76
|
+
description: localized.description,
|
|
77
|
+
ui,
|
|
78
|
+
faqTitle: localized.faqTitle,
|
|
79
|
+
faq: localized.faq,
|
|
80
|
+
bibliographyTitle: localized.bibliographyTitle,
|
|
81
|
+
bibliography,
|
|
82
|
+
howTo: localized.howTo,
|
|
83
|
+
schemas: [appSchema, faqSchema, howToSchema],
|
|
84
|
+
seo: [
|
|
85
|
+
{ type: 'title', text: localized.seoTitle, level: 2 },
|
|
86
|
+
{ type: 'paragraph', html: localized.seoIntro },
|
|
87
|
+
{ type: 'stats', columns: 3, items: [{ value: '2', label: ui.brandLabel, icon: 'mdi:domain' }, { value: '4', label: ui.formatLabel, icon: 'mdi:crop' }, { value: '0', label: ui.activeLayer, icon: 'mdi:cat' }] },
|
|
88
|
+
{ type: 'title', text: localized.title, level: 3 },
|
|
89
|
+
{ type: 'paragraph', html: localized.seoBody },
|
|
90
|
+
{ type: 'title', text: localized.faqTitle, level: 3 },
|
|
91
|
+
{ type: 'paragraph', html: localized.seoBody },
|
|
92
|
+
{ type: 'table', headers: [ui.toolLayer, ui.titleLayer, ui.brandLabel], rows: [[ui.toolLabel, ui.titleLabel, ui.logoLabel]] },
|
|
93
|
+
{ type: 'tip', title: localized.faqTitle, html: localized.seoTip },
|
|
94
|
+
],
|
|
95
|
+
};
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import type { FAQPage, HowTo, SoftwareApplication, WithContext } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { PromoteThisWebsiteUI } from '../ui';
|
|
4
|
+
import { bibliography } from '../bibliography';
|
|
5
|
+
|
|
6
|
+
const localized = {
|
|
7
|
+
slug: 'promoot-deze-website',
|
|
8
|
+
title: 'Promoot deze website',
|
|
9
|
+
description: "De interne propagandabalie voor jjlmoya.es in het Spaans en GameBob.dev internationaal. Maak van screenshots van je eigen pagina's sociale afbeeldingen voordat Bob de feed gênant vindt.",
|
|
10
|
+
faqTitle: 'Promoot deze website zonder de kat kwaad te maken',
|
|
11
|
+
bibliographyTitle: "Pagina's uit de operatie",
|
|
12
|
+
faq: [
|
|
13
|
+
{ question: 'Voor wie is deze tool eigenlijk?', answer: "Voor het promoten van pagina's op jjlmoya.es in het Spaans en GameBob.dev internationaal. De rest mag door het raam kijken." },
|
|
14
|
+
{ question: 'Kan ik rechtstreeks een screenshot plakken?', answer: 'Ja. Kopieer een screenshot en druk op Ctrl+V. Het wordt de tool-laag, want zelfs het kattenbestuur accepteert bewijs in het juiste formaat.' },
|
|
15
|
+
{ question: 'Wat gebeurt er met een productie-URL?', answer: 'De tool leest de metatitel, kiest het juiste merk en laadt de Open Graph-afbeelding. De slug krijgt eindelijk geen promotie.' },
|
|
16
|
+
{ question: 'Waarom zijn er twee merken?', answer: 'jjlmoya.es is de Spaanse pagina en GameBob.dev de internationale pagina. De katten doen alsof ze het verschil niet zien.' },
|
|
17
|
+
{ question: 'Worden mijn afbeeldingen geüpload?', answer: 'Nee. Ze blijven in de browser en de compositie wordt lokaal gerenderd. Alleen je bewust gedownloade PNG verlaat de pagina.' },
|
|
18
|
+
],
|
|
19
|
+
howTo: [
|
|
20
|
+
{ name: 'Plak een screenshot', text: 'Plak met Ctrl+V een screenshot van jjlmoya.es of GameBob.dev. Het bestuur vraagt bewijs uit zijn eigen rijk.' },
|
|
21
|
+
{ name: 'Kies het merk', text: 'Kies jjlmoya.es voor Spaans of GameBob.dev voor de internationale pagina. De kat bezit het pand al.' },
|
|
22
|
+
{ name: 'Rangschik de afbeelding', text: 'Sleep screenshot, titel, logo, achtergrond en mascotte tot de compositie opzettelijk lijkt.' },
|
|
23
|
+
{ name: 'Exporteer de PNG', text: 'Download de PNG in de gewenste afmetingen voordat Bob met de eer gaat lopen.' },
|
|
24
|
+
],
|
|
25
|
+
seoTitle: 'De officiële propagandabalie van jjlmoya en GameBob',
|
|
26
|
+
seoIntro: "Dit is geen generieke social-media-componist voor iemand die net het woord branding heeft ontdekt. Hij bestaat om onze pagina's op jjlmoya.es en GameBob.dev te promoten terwijl de katten toezicht houden.",
|
|
27
|
+
seoBody: 'Plak een echte screenshot of laad een productie-URL. De tool leest de paginatitel in plaats van te gokken op basis van de slug en houdt de officiële Open Graph-afbeelding zichtbaar.',
|
|
28
|
+
seoTip: 'Begin met een productie-URL van jjlmoya.es of GameBob.dev. Als titel, merk of afbeelding niet laden, geeft het bestuur eerst het netwerk, dan de mens en ten slotte de katten de schuld.',
|
|
29
|
+
};
|
|
30
|
+
const ui: PromoteThisWebsiteUI = {
|
|
31
|
+
urlLabel: 'Website-URL', urlPlaceholder: 'https://www.example.com/tools/voorbeeld/', applyUrl: 'Toepassen',
|
|
32
|
+
formatLabel: 'Formaat', panoramic: 'Panorama · 1536 × 1024', instagram: 'Instagram · 1080 × 1350', square: 'Vierkant · 1080 × 1080', story: 'Story · 1080 × 1920',
|
|
33
|
+
titleLabel: 'Titel', titlePlaceholder: 'Een korte titel voor de afbeelding', titleSizeLabel: 'Lettergrootte van titel', titleBoxSizeLabel: 'Grootte van titelvak', titleStyleLabel: 'Titelstijl',
|
|
34
|
+
brandLabel: 'Merk', brandStyleLabel: 'Merkstijl', advancedLabel: 'Geavanceerde compositie', assetsLabel: 'Middelen', backgroundLabel: 'Achtergrond', toolLabel: 'Screenshot van tool', logoLabel: 'Logo', mascotLabel: 'Mascotte',
|
|
35
|
+
layersLabel: 'Lagen', backgroundLayer: 'Achtergrond', toolLayer: 'Tool', logoLayer: 'Logo', mascotLayer: 'Mascotte', titleLayer: 'Titel', reset: 'Resetten', download: 'PNG downloaden', activeLayer: 'Actieve laag',
|
|
36
|
+
canvasHint: 'Sleep lagen rechtstreeks op het canvas. Plak een screenshot met Ctrl+V.', pasted: 'Screenshot als tool-laag geplakt.', urlApplied: 'URL toegepast. Pas de titel aan en voeg de screenshot toe die je wilt promoten.', urlLoading: 'Paginatitel en officiële afbeelding worden gelezen...', urlFailed: 'Deze pagina kon niet worden gelezen. Controleer de URL of voeg de middelen handmatig toe.', fileLoaded: 'Middel geladen.',
|
|
37
|
+
titlePaper: 'Redactioneel papier', titleRibbon: 'Gevouwen lint', titleInk: 'Inktspat', titlePoster: 'Nachtposter', titleTicket: 'Afscheurbaar kaartje', titleMarker: 'Materiële onderstreping', titleSplit: 'Gesplitst blok', titleCapsule: 'Minimale capsule', titleCorner: 'Redactionele hoek', titleVertical: 'Verticaal accent',
|
|
38
|
+
brandPlain: 'Eenvoudig merk', brandPlaque: 'Keramieken plaquette', brandTicket: 'Toegangskaartje', brandStamp: 'Rubberen stempel', brandNeon: 'Neonreclame', brandRibbon: 'Signaallint', brandCorner: 'Redactionele hoek', brandPixel: 'Pixelblok', brandHalo: 'Zachte halo', brandEditorial: 'Redactionele lijn', defaultTool: 'Plak je tool-screenshot',
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
42
|
+
'@context': 'https://schema.org',
|
|
43
|
+
'@type': 'FAQPage',
|
|
44
|
+
mainEntity: localized.faq.map((item) => ({
|
|
45
|
+
'@type': 'Question',
|
|
46
|
+
name: item.question,
|
|
47
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
48
|
+
})),
|
|
49
|
+
};
|
|
50
|
+
const howToSchema: WithContext<HowTo> = {
|
|
51
|
+
'@context': 'https://schema.org',
|
|
52
|
+
'@type': 'HowTo',
|
|
53
|
+
name: localized.title,
|
|
54
|
+
description: localized.description,
|
|
55
|
+
step: localized.howTo.map((step, index) => ({
|
|
56
|
+
'@type': 'HowToStep',
|
|
57
|
+
position: index + 1,
|
|
58
|
+
name: step.name,
|
|
59
|
+
text: step.text,
|
|
60
|
+
})),
|
|
61
|
+
};
|
|
62
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
63
|
+
'@context': 'https://schema.org',
|
|
64
|
+
'@type': 'SoftwareApplication',
|
|
65
|
+
name: localized.title,
|
|
66
|
+
description: localized.description,
|
|
67
|
+
applicationCategory: 'DeveloperApplication',
|
|
68
|
+
operatingSystem: 'Any',
|
|
69
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
70
|
+
inLanguage: 'nl',
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
export const content: ToolLocaleContent<PromoteThisWebsiteUI> = {
|
|
74
|
+
slug: localized.slug,
|
|
75
|
+
title: localized.title,
|
|
76
|
+
description: localized.description,
|
|
77
|
+
ui,
|
|
78
|
+
faqTitle: localized.faqTitle,
|
|
79
|
+
faq: localized.faq,
|
|
80
|
+
bibliographyTitle: localized.bibliographyTitle,
|
|
81
|
+
bibliography,
|
|
82
|
+
howTo: localized.howTo,
|
|
83
|
+
schemas: [appSchema, faqSchema, howToSchema],
|
|
84
|
+
seo: [
|
|
85
|
+
{ type: 'title', text: localized.seoTitle, level: 2 },
|
|
86
|
+
{ type: 'paragraph', html: localized.seoIntro },
|
|
87
|
+
{ type: 'stats', columns: 3, items: [{ value: '2', label: ui.brandLabel, icon: 'mdi:domain' }, { value: '4', label: ui.formatLabel, icon: 'mdi:crop' }, { value: '0', label: ui.activeLayer, icon: 'mdi:cat' }] },
|
|
88
|
+
{ type: 'title', text: localized.title, level: 3 },
|
|
89
|
+
{ type: 'paragraph', html: localized.seoBody },
|
|
90
|
+
{ type: 'title', text: localized.faqTitle, level: 3 },
|
|
91
|
+
{ type: 'paragraph', html: localized.seoBody },
|
|
92
|
+
{ type: 'table', headers: [ui.toolLayer, ui.titleLayer, ui.brandLabel], rows: [[ui.toolLabel, ui.titleLabel, ui.logoLabel]] },
|
|
93
|
+
{ type: 'tip', title: localized.faqTitle, html: localized.seoTip },
|
|
94
|
+
],
|
|
95
|
+
};
|