@jjlmoya/utils-creative 1.8.0 → 1.10.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 +1 -1
- package/src/tests/slug_language_code_format.test.ts +23 -0
- package/src/tests/slug_uniqueness.test.ts +81 -0
- package/src/tool/bead-pattern-generator/i18n/ja.ts +1 -1
- package/src/tool/bead-pattern-generator/i18n/ko.ts +1 -1
- package/src/tool/bead-pattern-generator/i18n/ru.ts +1 -1
- package/src/tool/bead-pattern-generator/i18n/zh.ts +1 -1
- package/src/tool/dice-roller/i18n/ja.ts +1 -1
- package/src/tool/dice-roller/i18n/ko.ts +1 -1
- package/src/tool/dice-roller/i18n/ru.ts +1 -1
- package/src/tool/dice-roller/i18n/zh.ts +1 -1
- package/src/tool/excuse-generator/i18n/ja.ts +1 -1
- package/src/tool/excuse-generator/i18n/ko.ts +1 -1
- package/src/tool/excuse-generator/i18n/ru.ts +1 -1
- package/src/tool/excuse-generator/i18n/zh.ts +1 -1
- package/src/tool/fortune-cookie/i18n/ja.ts +1 -1
- package/src/tool/fortune-cookie/i18n/ko.ts +1 -1
- package/src/tool/fortune-cookie/i18n/ru.ts +1 -1
- package/src/tool/fortune-cookie/i18n/zh.ts +1 -1
- package/src/tool/synesthesia-painter/i18n/ja.ts +1 -1
- package/src/tool/synesthesia-painter/i18n/ko.ts +1 -1
- package/src/tool/synesthesia-painter/i18n/ru.ts +1 -1
- package/src/tool/synesthesia-painter/i18n/zh.ts +1 -1
- package/src/tool/zalgo-generator/i18n/de.ts +1 -1
- package/src/tool/zalgo-generator/i18n/ja.ts +1 -1
- package/src/tool/zalgo-generator/i18n/ko.ts +1 -1
- package/src/tool/zalgo-generator/i18n/nl.ts +1 -1
- package/src/tool/zalgo-generator/i18n/pl.ts +1 -1
- package/src/tool/zalgo-generator/i18n/ru.ts +1 -1
- package/src/tool/zalgo-generator/i18n/sv.ts +1 -1
- package/src/tool/zalgo-generator/i18n/zh.ts +1 -1
package/package.json
CHANGED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { ALL_TOOLS } from '../tools';
|
|
3
|
+
import type { ToolLocaleContent } from '../types';
|
|
4
|
+
|
|
5
|
+
describe('Slug Language Code Format Validation', () => {
|
|
6
|
+
ALL_TOOLS.forEach((tool) => {
|
|
7
|
+
describe(`Tool: ${tool.entry.id}`, () => {
|
|
8
|
+
it('slug should not end with 2-letter language codes like -ja, -ru, -ko', async () => {
|
|
9
|
+
const locales = Object.keys(tool.entry.i18n);
|
|
10
|
+
|
|
11
|
+
for (const locale of locales) {
|
|
12
|
+
const loader = tool.entry.i18n[locale as keyof typeof tool.entry.i18n];
|
|
13
|
+
const content = (await loader?.()) as ToolLocaleContent;
|
|
14
|
+
|
|
15
|
+
expect(
|
|
16
|
+
content.slug,
|
|
17
|
+
`Tool "${tool.entry.id}" locale "${locale}" slug ("${content.slug}") cannot end with a 2-letter language code (e.g., -ja, -ru, -ko).`,
|
|
18
|
+
).not.toMatch(/-[a-z]{2}$/);
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
});
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { ALL_TOOLS } from '../tools';
|
|
3
|
+
import type { ToolLocaleContent } from '../types';
|
|
4
|
+
|
|
5
|
+
const sharingLocales = ['ja', 'ko', 'zh'];
|
|
6
|
+
|
|
7
|
+
interface ValidateParams {
|
|
8
|
+
toolId: string;
|
|
9
|
+
locale: string;
|
|
10
|
+
content: ToolLocaleContent;
|
|
11
|
+
enSlug: string;
|
|
12
|
+
slugs: Map<string, string>;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const validateLocaleSlug = ({
|
|
16
|
+
toolId,
|
|
17
|
+
locale,
|
|
18
|
+
content,
|
|
19
|
+
enSlug,
|
|
20
|
+
slugs,
|
|
21
|
+
}: ValidateParams) => {
|
|
22
|
+
expect(
|
|
23
|
+
content.slug,
|
|
24
|
+
`Tool "${toolId}" locale "${locale}" has an invalid slug ("${content.slug}"). Slugs must be transliterated (only a-z, 0-9, and -).`,
|
|
25
|
+
).toMatch(/^[a-z0-9-]+$/);
|
|
26
|
+
|
|
27
|
+
if (locale === 'en') {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
if (sharingLocales.includes(locale)) {
|
|
32
|
+
expect(
|
|
33
|
+
content.slug,
|
|
34
|
+
`Tool "${toolId}" locale "${locale}" must use the same slug as "en" ("${enSlug}").`,
|
|
35
|
+
).toBe(enSlug);
|
|
36
|
+
} else {
|
|
37
|
+
expect(
|
|
38
|
+
content.slug,
|
|
39
|
+
`Tool "${toolId}" locale "${locale}" has the same slug as "en" ("${enSlug}"). Cada slug tiene que estar en su propia idioma`,
|
|
40
|
+
).not.toBe(enSlug);
|
|
41
|
+
|
|
42
|
+
if (slugs.has(content.slug)) {
|
|
43
|
+
const previousLocale = slugs.get(content.slug);
|
|
44
|
+
expect(
|
|
45
|
+
false,
|
|
46
|
+
`Tool "${toolId}" locales "${locale}" and "${previousLocale}" share the same slug ("${content.slug}"). Cada slug tiene que estar en su propia idioma`,
|
|
47
|
+
).toBe(true);
|
|
48
|
+
}
|
|
49
|
+
slugs.set(content.slug, locale);
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
describe('Slug Localization and Uniqueness Validation', () => {
|
|
54
|
+
ALL_TOOLS.forEach((tool) => {
|
|
55
|
+
describe(`Tool: ${tool.entry.id}`, () => {
|
|
56
|
+
it('every locale should have a unique, translated slug', async () => {
|
|
57
|
+
const slugs = new Map<string, string>();
|
|
58
|
+
const locales = Object.keys(tool.entry.i18n);
|
|
59
|
+
|
|
60
|
+
let enSlug = '';
|
|
61
|
+
if (locales.includes('en')) {
|
|
62
|
+
const enLoader = tool.entry.i18n['en' as keyof typeof tool.entry.i18n];
|
|
63
|
+
const enContent = (await enLoader?.()) as ToolLocaleContent;
|
|
64
|
+
enSlug = enContent.slug;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
for (const locale of locales) {
|
|
68
|
+
const loader = tool.entry.i18n[locale as keyof typeof tool.entry.i18n];
|
|
69
|
+
const content = (await loader?.()) as ToolLocaleContent;
|
|
70
|
+
validateLocaleSlug({
|
|
71
|
+
toolId: tool.entry.id,
|
|
72
|
+
locale,
|
|
73
|
+
content,
|
|
74
|
+
enSlug,
|
|
75
|
+
slugs,
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
});
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
2
|
import type { BeadPatternGeneratorLocaleContent } from '../index';
|
|
3
3
|
|
|
4
|
-
const slug = 'bead-pattern-generator
|
|
4
|
+
const slug = 'bead-pattern-generator';
|
|
5
5
|
const title = 'パターンジェネレーター';
|
|
6
6
|
const description = 'あなたの写真から、デリカビーズ(Miyuki)やアイロンビーズ(Hama)のピクセルアートや図案を作成します。減色アルゴリズム、トンネルビジョンモード、ZIPエクスポート機能を搭載。';
|
|
7
7
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
2
|
import type { BeadPatternGeneratorLocaleContent } from '../index';
|
|
3
3
|
|
|
4
|
-
const slug = 'bead-pattern-generator
|
|
4
|
+
const slug = 'bead-pattern-generator';
|
|
5
5
|
const title = '도안 생성기';
|
|
6
6
|
const description = '사진을 사용하여 미유키 또는 하마 비즈를 위한 픽셀 아트 및 도안을 만들어보세요. 색상 양자화 알고리즘, 터널 시야 모드, ZIP 내보내기 기능을 지원합니다.';
|
|
7
7
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
2
|
import type { BeadPatternGeneratorLocaleContent } from '../index';
|
|
3
3
|
|
|
4
|
-
const slug = '
|
|
4
|
+
const slug = 'generator-skhem';
|
|
5
5
|
const title = 'Генератор схем';
|
|
6
6
|
const description = 'Создавайте пиксель-арт и схемы для бисероплетения (Miyuki) или термомозаики (Hama) из ваших фотографий. Алгоритм квантования цветов, режим туннельного зрения и экспорт в ZIP.';
|
|
7
7
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
2
|
import type { BeadPatternGeneratorLocaleContent } from '../index';
|
|
3
3
|
|
|
4
|
-
const slug = 'bead-pattern-generator
|
|
4
|
+
const slug = 'bead-pattern-generator';
|
|
5
5
|
const title = '串珠图案生成器';
|
|
6
6
|
const description = '根据您的照片生成适用于 Miyuki(米珠)或 Hama(拼拼豆豆)的像素艺术和串珠方案。包含颜色量化算法、隧道视野模式及 ZIP 导出功能。';
|
|
7
7
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
2
|
import type { DiceRollerLocaleContent } from '../index';
|
|
3
3
|
|
|
4
|
-
const slug = 'dice-roller
|
|
4
|
+
const slug = 'dice-roller';
|
|
5
5
|
const title = 'ダイスローラー';
|
|
6
6
|
const description = 'RPGやボードゲームに最適なダイスシミュレーター。d4, d6, d8, d10, d12, d20, d100に対応し、修正値の適用や履歴の確認も可能です。';
|
|
7
7
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
2
|
import type { DiceRollerLocaleContent } from '../index';
|
|
3
3
|
|
|
4
|
-
const slug = 'dice-roller
|
|
4
|
+
const slug = 'dice-roller';
|
|
5
5
|
const title = '주사위 굴리기';
|
|
6
6
|
const description = 'RPG 및 보드게임을 위한 완벽한 주사위 시뮬레이터입니다. 수정치 및 기록 기능과 함께 d4, d6, d8, d10, d12, d20, d100을 굴려보세요.';
|
|
7
7
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
2
|
import type { DiceRollerLocaleContent } from '../index';
|
|
3
3
|
|
|
4
|
-
const slug = '
|
|
4
|
+
const slug = 'simulator-kostey';
|
|
5
5
|
const title = 'Симулятор костей';
|
|
6
6
|
const description = 'Полный симулятор костей для ваших RPG и настольных игр. Бросайте d4, d6, d8, d10, d12, d20 и d100 с модификаторами и историей.';
|
|
7
7
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
2
|
import type { DiceRollerLocaleContent } from '../index';
|
|
3
3
|
|
|
4
|
-
const slug = 'dice-roller
|
|
4
|
+
const slug = 'dice-roller';
|
|
5
5
|
const title = '在线掷骰子';
|
|
6
6
|
const description = '一个为您的 RPG 和桌面游戏而设计的全功能骰子模拟器。支持掷 d4、d6、d8、d10、d12、d20 和 d100,并带有修正值和历史记录功能。';
|
|
7
7
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
2
|
import type { ExcuseGeneratorLocaleContent } from '../index';
|
|
3
3
|
|
|
4
|
-
const slug = 'excuse-generator
|
|
4
|
+
const slug = 'excuse-generator';
|
|
5
5
|
const title = '言い訳ジェネレーター';
|
|
6
6
|
const description = '付き合いを華麗にスルーするためのセマンティック・ギャンブルマシン。シュールで反論の余地のない言い訳を瞬時に生成します。';
|
|
7
7
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
2
|
import type { ExcuseGeneratorLocaleContent } from '../index';
|
|
3
3
|
|
|
4
|
-
const slug = 'excuse-generator
|
|
4
|
+
const slug = 'excuse-generator';
|
|
5
5
|
const title = '핑계 생성기';
|
|
6
6
|
const description = '의무감에서 멋지게 벗어나기 위한 시맨틱 도박기입니다. 초현실적이고 반박할 수 없는 핑계를 즉시 생성하세요.';
|
|
7
7
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
2
|
import type { ExcuseGeneratorLocaleContent } from '../index';
|
|
3
3
|
|
|
4
|
-
const slug = '
|
|
4
|
+
const slug = 'generator-otgovorki';
|
|
5
5
|
const title = 'Генератор отговорок';
|
|
6
6
|
const description = 'Семантическая машина для стильного избавления от обязательств. Мгновенно создавайте сюрреалистичные и неопровержимые отговорки.';
|
|
7
7
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
2
|
import type { ExcuseGeneratorLocaleContent } from '../index';
|
|
3
3
|
|
|
4
|
-
const slug = 'excuse-generator
|
|
4
|
+
const slug = 'excuse-generator';
|
|
5
5
|
const title = '借口生成器';
|
|
6
6
|
const description = '语义化的随机机器,让您有格调地摆脱承诺。瞬间生成超现实且无可辩驳的借口。';
|
|
7
7
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
2
|
import type { FortuneCookieLocaleContent } from '../index';
|
|
3
3
|
|
|
4
|
-
const slug = 'fortune-cookie
|
|
4
|
+
const slug = 'fortune-cookie';
|
|
5
5
|
const title = 'フォーチュンクッキー';
|
|
6
6
|
const description = '一日の運勢を確認し、ラッキーナンバーを見つけましょう。一日に一回、クリックで運勢を占うことができます。';
|
|
7
7
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
2
|
import type { FortuneCookieLocaleContent } from '../index';
|
|
3
3
|
|
|
4
|
-
const slug = '
|
|
4
|
+
const slug = 'fortune-cookie';
|
|
5
5
|
const title = '포춘 쿠키';
|
|
6
6
|
const description = '오늘의 운세를 확인하고 행운의 숫자를 발견하세요. 하루에 하나의 운세를 클릭 한 번으로 확인해보세요.';
|
|
7
7
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
2
|
import type { FortuneCookieLocaleContent } from '../index';
|
|
3
3
|
|
|
4
|
-
const slug = '
|
|
4
|
+
const slug = 'pechenie-s-predskazaniem-online';
|
|
5
5
|
const title = 'Печенье с предсказанием';
|
|
6
6
|
const description = 'Узнайте свою судьбу на сегодня и получите счастливые числа. Одно предсказание в день, доступное по клику.';
|
|
7
7
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
2
|
import type { FortuneCookieLocaleContent } from '../index';
|
|
3
3
|
|
|
4
|
-
const slug = 'fortune-cookie
|
|
4
|
+
const slug = 'fortune-cookie';
|
|
5
5
|
const title = '幸运饼干';
|
|
6
6
|
const description = '查看您的每日运势并发现您的幸运数字。每天一个在线幸运饼干,一键开启您的预言。';
|
|
7
7
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
2
|
import type { SynesthesiaPainterLocaleContent } from '../index';
|
|
3
3
|
|
|
4
|
-
const slug = 'synesthesia-painter
|
|
4
|
+
const slug = 'synesthesia-painter';
|
|
5
5
|
const title = '共感覚ペインター';
|
|
6
6
|
const description = '書記素-色共感覚に基づき、文字の色を可視化します。各文字が固有の色を持ち、テキストを色彩豊かなアートへと変換します。';
|
|
7
7
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
2
|
import type { SynesthesiaPainterLocaleContent } from '../index';
|
|
3
3
|
|
|
4
|
-
const slug = 'synesthesia-painter
|
|
4
|
+
const slug = 'synesthesia-painter';
|
|
5
5
|
const title = '공감각 페인터';
|
|
6
6
|
const description = '음소-색 공감각에 따라 단어의 색상을 시각화합니다. 각 글자는 고유한 색상을 가지며, 텍스트를 색채 예술로 변환합니다.';
|
|
7
7
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
2
|
import type { SynesthesiaPainterLocaleContent } from '../index';
|
|
3
3
|
|
|
4
|
-
const slug = '
|
|
4
|
+
const slug = 'khudozhnik-sinestezii';
|
|
5
5
|
const title = 'Художник синестезии';
|
|
6
6
|
const description = 'Визуализируйте цвет слов в соответствии с графемно-цветовой синестезией. Каждая буква имеет свой цвет, превращая текст в хроматическое искусство.';
|
|
7
7
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
2
|
import type { SynesthesiaPainterLocaleContent } from '../index';
|
|
3
3
|
|
|
4
|
-
const slug = 'synesthesia-painter
|
|
4
|
+
const slug = 'synesthesia-painter';
|
|
5
5
|
const title = '联觉绘画家';
|
|
6
6
|
const description = '根据“书记素-色彩联觉”可视化文字颜色。每个字母都有其专属色彩,将文本转化为色度艺术。';
|
|
7
7
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
2
|
import type { ZalgoGeneratorLocaleContent } from '../index';
|
|
3
3
|
|
|
4
|
-
const slug = 'zalgo-
|
|
4
|
+
const slug = 'zalgo-textgenerator';
|
|
5
5
|
const title = 'Zalgo Generator';
|
|
6
6
|
const description = 'Korrumpieren Sie Ihre Nachrichten mit kaskadierenden, überlaufenden Unicode-Zeichen. Passen Sie Intensität und Richtung des Glitch-Effekts an.';
|
|
7
7
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
2
|
import type { ZalgoGeneratorLocaleContent } from '../index';
|
|
3
3
|
|
|
4
|
-
const slug = 'zalgo-generator
|
|
4
|
+
const slug = 'zalgo-generator';
|
|
5
5
|
const title = 'Zalgoテキスト生成器';
|
|
6
6
|
const description = 'カスケード状に溢れ出すUnicode文字でメッセージを破壊します。グリッチ効果の強さと方向を調整できます。';
|
|
7
7
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
2
|
import type { ZalgoGeneratorLocaleContent } from '../index';
|
|
3
3
|
|
|
4
|
-
const slug = 'zalgo-generator
|
|
4
|
+
const slug = 'zalgo-generator';
|
|
5
5
|
const title = '잘고 텍스트 생성기';
|
|
6
6
|
const description = '폭포수처럼 쏟아지는 유니코드 문자로 메시지를 오염시키세요. 글리치 효과의 강도와 방향을 조정할 수 있습니다.';
|
|
7
7
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
2
|
import type { ZalgoGeneratorLocaleContent } from '../index';
|
|
3
3
|
|
|
4
|
-
const slug = 'zalgo-
|
|
4
|
+
const slug = 'zalgo-tekstgenerator';
|
|
5
5
|
const title = 'Zalgo generator';
|
|
6
6
|
const description = 'Corrumpeer je berichten met cascade-achtige overlopende Unicode-karakters. Pas de intensiteit en richting van het glitch-effect aan.';
|
|
7
7
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
2
|
import type { ZalgoGeneratorLocaleContent } from '../index';
|
|
3
3
|
|
|
4
|
-
const slug = '
|
|
4
|
+
const slug = 'generatory-zalgo';
|
|
5
5
|
const title = 'Generator Zalgo';
|
|
6
6
|
const description = 'Skorumpuj swoje wiadomości kaskadowymi, przelewającymi się znakami Unicode. Dostosuj intensywność i kierunek efektu glitch.';
|
|
7
7
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
2
|
import type { ZalgoGeneratorLocaleContent } from '../index';
|
|
3
3
|
|
|
4
|
-
const slug = '
|
|
4
|
+
const slug = 'generator-zalgo';
|
|
5
5
|
const title = 'Генератор Залго';
|
|
6
6
|
const description = 'Искажайте свои сообщения с помощью каскадных переливающихся символов Юникода. Настройте интенсивность и направление эффекта глюка.';
|
|
7
7
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
2
|
import type { ZalgoGeneratorLocaleContent } from '../index';
|
|
3
3
|
|
|
4
|
-
const slug = 'zalgo-
|
|
4
|
+
const slug = 'zalgo-generering';
|
|
5
5
|
const title = 'Zalgo generator';
|
|
6
6
|
const description = 'Korrumpera dina meddelanden med kaskadliknande överflödiga Unicode-tecken. Justera intensitet och riktning för glitch-effekten.';
|
|
7
7
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
2
|
import type { ZalgoGeneratorLocaleContent } from '../index';
|
|
3
3
|
|
|
4
|
-
const slug = 'zalgo-generator
|
|
4
|
+
const slug = 'zalgo-generator';
|
|
5
5
|
const title = 'Zalgo 文本生成器';
|
|
6
6
|
const description = '使用级联溢出的 Unicode 字符破坏您的信息。调整故障效果的强度和方向。';
|
|
7
7
|
|