@jjlmoya/utils-streaming 1.2.0 → 1.4.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 +2 -1
- package/src/category/i18n/de.ts +134 -0
- package/src/category/i18n/id.ts +134 -0
- package/src/category/i18n/it.ts +134 -0
- package/src/category/i18n/ja.ts +134 -0
- package/src/category/i18n/ko.ts +134 -0
- package/src/category/i18n/nl.ts +134 -0
- package/src/category/i18n/pl.ts +134 -0
- package/src/category/i18n/pt.ts +134 -0
- package/src/category/i18n/ru.ts +134 -0
- package/src/category/i18n/sv.ts +134 -0
- package/src/category/i18n/tr.ts +134 -0
- package/src/category/i18n/zh.ts +134 -0
- package/src/category/index.ts +12 -0
- package/src/index.ts +1 -1
- package/src/tests/i18n_coverage.test.ts +36 -0
- package/src/tests/locale_completeness.test.ts +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/sorteo/i18n/de.ts +256 -0
- package/src/tool/sorteo/i18n/id.ts +256 -0
- package/src/tool/sorteo/i18n/it.ts +256 -0
- package/src/tool/sorteo/i18n/ja.ts +256 -0
- package/src/tool/sorteo/i18n/ko.ts +256 -0
- package/src/tool/sorteo/i18n/nl.ts +256 -0
- package/src/tool/sorteo/i18n/pl.ts +256 -0
- package/src/tool/sorteo/i18n/pt.ts +256 -0
- package/src/tool/sorteo/i18n/ru.ts +256 -0
- package/src/tool/sorteo/i18n/sv.ts +256 -0
- package/src/tool/sorteo/i18n/tr.ts +256 -0
- package/src/tool/sorteo/i18n/zh.ts +256 -0
- package/src/tool/sorteo/index.ts +12 -0
- package/src/tool/tebasCheck/i18n/de.ts +256 -0
- package/src/tool/tebasCheck/i18n/id.ts +256 -0
- package/src/tool/tebasCheck/i18n/it.ts +256 -0
- package/src/tool/tebasCheck/i18n/ja.ts +256 -0
- package/src/tool/tebasCheck/i18n/ko.ts +256 -0
- package/src/tool/tebasCheck/i18n/nl.ts +256 -0
- package/src/tool/tebasCheck/i18n/pl.ts +256 -0
- package/src/tool/tebasCheck/i18n/pt.ts +256 -0
- package/src/tool/tebasCheck/i18n/ru.ts +256 -0
- package/src/tool/tebasCheck/i18n/sv.ts +256 -0
- package/src/tool/tebasCheck/i18n/tr.ts +256 -0
- package/src/tool/tebasCheck/i18n/zh.ts +256 -0
- package/src/tool/tebasCheck/index.ts +12 -0
- package/src/tools.ts +2 -0
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import type { CategoryLocaleContent } from '../../types';
|
|
2
|
+
|
|
3
|
+
export const content: CategoryLocaleContent = {
|
|
4
|
+
slug: 'streaming',
|
|
5
|
+
title: 'Инструменты для стриминга и авторов контента',
|
|
6
|
+
description:
|
|
7
|
+
'Повысьте уровень взаимодействия и безопасности ваших прямых эфиров с помощью бесплатных онлайн-инструментов. Рандомайзеры抽選 и детекторы сетевых блокировок ISP (Tebas-Check).',
|
|
8
|
+
seo: [
|
|
9
|
+
{
|
|
10
|
+
type: 'title',
|
|
11
|
+
text: 'Экосистема стриминга 2026: взаимодействие и сетевой суверенитет',
|
|
12
|
+
level: 2,
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
type: 'paragraph',
|
|
16
|
+
html: 'Стриминг превратился из простой передачи видео в сложную интерактивную и социальную среду. В этом разделе мы предлагаем <strong>бесплатные онлайн-инструменты</strong>, разработанные для стримеров Twitch, YouTube и Kick, которые стремятся профессионализировать свой контент и защитить свою техническую инфраструктуру. Способность динамизировать ваше сообщество и обеспечивать доступность ваших ресурсов — основа успешного канала.',
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
type: 'paragraph',
|
|
20
|
+
html: 'От честного и прозрачного проведения розыгрышей в прямом эфире до аудита сетевой цензуры и блокировок, применяемых провайдерами, наши утилиты дают вам необходимый контроль для навигации в конкурентном мире создания живого контента.',
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
type: 'title',
|
|
24
|
+
text: 'Геймификация и сообщество: прозрачные розыгрыши и конкурсы',
|
|
25
|
+
level: 2,
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
type: 'paragraph',
|
|
29
|
+
html: 'Геймификация — ключ к удержанию аудитории. Наш <strong>инструмент для розыгрышей и конкурсов</strong> позволяет выбирать случайных победителей полностью прозрачным способом. Благодаря локальной обработке на вашем терминале вы гарантируете отсутствие внешних манипуляций, что способствует доверию подписчиков во время живых розыгрышей.',
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
type: 'tool',
|
|
33
|
+
tool: 'sorteo',
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
type: 'title',
|
|
37
|
+
text: 'Сетевой аудит и нейтральность: Tebas-Check',
|
|
38
|
+
level: 2,
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
type: 'paragraph',
|
|
42
|
+
html: 'В цифровой среде 2026 года судебные блокировки и ограничения провайдеров могут повлиять на стабильность вашего стрима или доступ вашего сообщества к вашим ресурсам. <strong>Tebas-Check</strong> — это инструмент технической диагностики, который определяет, применяет ли ваш оператор цензуру или превентивные блокировки на инфраструктурах, таких как Cloudflare или других контент-провайдерах, позволяя вам проводить аудит нейтральности вашей сети.',
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
type: 'tool',
|
|
46
|
+
tool: 'tebas-check',
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
type: 'list',
|
|
50
|
+
items: [
|
|
51
|
+
'<strong>Динамическое взаимодействие:</strong> стимулируйте участие сообщества с помощью честных и прозрачных инструментов удачи.',
|
|
52
|
+
'<strong>Техническая безопасность:</strong> проводите аудит вашего соединения и выявляйте сетевые блокировки, которые могут ухудшить качество вашего стрима.',
|
|
53
|
+
'<strong>Конфиденциальность данных:</strong> ни ваши списки участников, ни ваша сетевая диагностика не хранятся на наших серверах.',
|
|
54
|
+
'<strong>Нулевая задержка:</strong> инструменты, оптимизированные для использования в прямом эфире, не потребляющие избыточные ресурсы вашего стримингового оборудования.',
|
|
55
|
+
],
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
type: 'tip',
|
|
59
|
+
title: 'Профессиональный девиз прямого эфира',
|
|
60
|
+
html: '<p><strong>Прозрачность:</strong> при проведении розыгрыша не забудьте захватить экран, на котором запущен инструмент. Демонстрация вашему сообществу процесса случайного выбора в реальном времени — лучший способ построить доверительные отношения и долгосрочную лояльность.</p>',
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
type: 'title',
|
|
64
|
+
text: 'Управление сообществом: модели модерации и безопасности',
|
|
65
|
+
level: 2,
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
type: 'paragraph',
|
|
69
|
+
html: 'Сообщество — самый ценный актив стримера. Рост без структуры хаотичен. Сообществом из 500 человек можно управлять в одиночку, но при 5000 вам нужны системы, четкие правила и инструменты модерации. Наши утилиты включают генераторы розыгрышей, которые также работают как системы честного участия: каждый зарегистрированный пользователь имеет абсолютно равные шансы на победу.',
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
type: 'paragraph',
|
|
73
|
+
html: 'Это особенно важно при распределении реальных или эксклюзивных призов. Ощущаемая несправедливость при розыгрыше может на месяцы разрушить отношения с подписчиками. Вот почему использование прозрачной системы, которая обрабатывает данные локально на вашем компьютере, является лучшей гарантией беспристрастности. Ваше сообщество видит работающий код, доверяет результату и продолжает возвращаться.',
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
type: 'title',
|
|
77
|
+
text: 'Инфраструктура и отказоустойчивость: когда провайдер мешает',
|
|
78
|
+
level: 2,
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
type: 'paragraph',
|
|
82
|
+
html: 'Блокировка доменов провайдерами или национальными властями становится все более распространенной в 2026 году. Инструменты, такие как Tebas-Check, позволяют авторам контента проверить, не подвергается ли их соединение ограничениям. Это критически важно для авторов, распространяющих контент на международном уровне или сталкивающихся с регуляторным контролем.',
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
type: 'paragraph',
|
|
86
|
+
html: 'Знание того, подвергается ли ваше соединение аудиту или блокировке, дает вам свободу действий: вы можете сменить провайдера, использовать легальные прокси или упростить свою инфраструктуру на основе полученных данных. Стрим, страдающий от неожиданных обрывов или лагов, может быть следствием сетевых блокировок, а не проблем с вашим оборудованием.',
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
type: 'title',
|
|
90
|
+
text: 'Устойчивая монетизация: от прямого эфира к стабильному доходу',
|
|
91
|
+
level: 2,
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
type: 'paragraph',
|
|
95
|
+
html: 'Превращение стриминга в устойчивую карьеру требует диверсификации. Подписки, донаты, реклама, мерч, курсы: каждый источник нуждается в вовлеченной аудитории. Инструменты геймификации, такие как розыгрыши, — это не просто развлечение; это психологические механизмы, повышающие удержание.',
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
type: 'paragraph',
|
|
99
|
+
html: 'Успешные авторы используют поведенческую психологию: подкрепление с переменным коэффициентом, вехи сообщества, сезонные события. Наши инструменты автоматизируют логику случайности, чтобы вы могли сосредоточиться на своем творческом таланте: развлечении, обучении, общении. Техническая сторона вопроса решена.',
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
type: 'title',
|
|
103
|
+
text: 'Омниканальность: фрагментированный стриминг требует единых инструментов',
|
|
104
|
+
level: 2,
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
type: 'paragraph',
|
|
108
|
+
html: 'Современный стример вещает не только на Twitch. Он стримит на Twitch, YouTube, Kick и Twitter/X одновременно. Это означает, что ваш розыгрыш должен быть честным, даже когда участники приходят с нескольких платформ. Наши инструменты не зависят от платформы: импортируйте список пользователей, запустите селектор, получите прозрачного победителя.',
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
type: 'paragraph',
|
|
112
|
+
html: 'Этот омниканальный подход — будущее. Фрагментация платформ необратима, и процветают те авторы, которые быстро адаптируются. Наличие набора утилит, работающих на любой платформе, является конкурентным преимуществом.',
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
type: 'title',
|
|
116
|
+
text: 'Будущее живого контента 2026',
|
|
117
|
+
level: 2,
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
type: 'paragraph',
|
|
121
|
+
html: 'Тенденция к <strong>децентрализованному и многоаккаунтному стримингу</strong> наметила путь в этом году. Авторы больше не зависят от одной платформы, и наличие независимого от платформ набора утилит имеет фундаментальное значение. Эти инструменты разработаны, чтобы быть техническим компаньоном, который сопровождает вас в каждой трансляции, независимо от того, где вы вещаете.',
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
type: 'stats',
|
|
125
|
+
columns: 2,
|
|
126
|
+
items: [
|
|
127
|
+
{ label: 'Случайность', value: 'Криптографическая', icon: 'mdi:ticket' },
|
|
128
|
+
{ label: 'Сеть', value: 'DNS-аудит', icon: 'mdi:radar' },
|
|
129
|
+
{ label: 'Стрим', value: 'Мультиплатформ', icon: 'mdi:broadcast' },
|
|
130
|
+
{ label: 'Доверие', value: 'Полная прозр.', icon: 'mdi:shield-check' },
|
|
131
|
+
],
|
|
132
|
+
},
|
|
133
|
+
],
|
|
134
|
+
};
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import type { CategoryLocaleContent } from '../../types';
|
|
2
|
+
|
|
3
|
+
export const content: CategoryLocaleContent = {
|
|
4
|
+
slug: 'streaming',
|
|
5
|
+
title: 'Verktyg för streaming och innehållsskapare',
|
|
6
|
+
description:
|
|
7
|
+
'Förbättra interaktionen och säkerheten i dina liveströmmar med gratis onlineverktyg. Slumpartade utlottningsväljare och detektorer för ISP-nätverksblockeringar (Tebas-Check).',
|
|
8
|
+
seo: [
|
|
9
|
+
{
|
|
10
|
+
type: 'title',
|
|
11
|
+
text: 'Ekosystem för streaming 2026: Interaktion och nätverkssuveränitet',
|
|
12
|
+
level: 2,
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
type: 'paragraph',
|
|
16
|
+
html: 'Streaming har utvecklats från enkel videoöverföring till en komplex interaktiv och social miljö. I det här avsnittet erbjuder vi <strong>gratis onlineverktyg</strong> designade för streamers på Twitch, YouTube och Kick som vill professionalisera sitt innehåll och skydda sin tekniska infrastruktur. Förmågan att dynamisera din community och säkerställa tillgängligheten för dina resurser är grunden för en framgångsrik kanal.',
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
type: 'paragraph',
|
|
20
|
+
html: 'Från rättvis och transparent hantering av live-utlottningar till revision av nätverkscensur och blockeringar som tillämpas av internetleverantörer, ger våra verktyg dig den kontroll som krävs för att navigera i den konkurrensutsatta världen av live-innehållsskapande.',
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
type: 'title',
|
|
24
|
+
text: 'Gamification och community: Transparenta utlottningar och tävlingar',
|
|
25
|
+
level: 2,
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
type: 'paragraph',
|
|
29
|
+
html: 'Gamification är nyckeln till att behålla publiken. Vårt <strong>utlottnings- och tävlingsverktyg</strong> gör det möjligt att välja slumpmässiga vinnare på ett helt transparent sätt. Genom att bearbeta lokalt på din terminal säkerställer du att ingen extern manipulation sker, vilket främjar följarnas förtroende under live-dragningar.',
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
type: 'tool',
|
|
33
|
+
tool: 'sorteo',
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
type: 'title',
|
|
37
|
+
text: 'Nätverksrevision och neutralitet: Tebas-Check',
|
|
38
|
+
level: 2,
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
type: 'paragraph',
|
|
42
|
+
html: 'I den digitala miljön 2026 kan rättsliga blockeringar och ISP-restriktioner påverka din streams stabilitet eller din communitys tillgång till dina resurser. <strong>Tebas-Check</strong> är ett tekniskt diagnostikverktyg som upptäcker om din operatör tillämpar censur eller förebyggande blockeringar av infrastruktur som Cloudflare eller andra innehållsleverantörer, vilket gör att du kan granska din nätverksneutralitet.',
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
type: 'tool',
|
|
46
|
+
tool: 'tebas-check',
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
type: 'list',
|
|
50
|
+
items: [
|
|
51
|
+
'<strong>Dynamisk interaktion:</strong> Uppmuntra communitydeltagande genom rättvisa och transparenta slumpverktyg.',
|
|
52
|
+
'<strong>Teknisk säkerhet:</strong> Granska din anslutning och upptäck nätverksblockeringar som kan försämra din streamkvalitet.',
|
|
53
|
+
'<strong>Datasekretess:</strong> Varken dina deltagarlistor eller dina nätverksdiagnoser lagras på våra servrar.',
|
|
54
|
+
'<strong>Noll latens:</strong> Optimerade verktyg för liveanvändning utan att förbruka överdrivna resurser från din streamingutrustning.',
|
|
55
|
+
],
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
type: 'tip',
|
|
59
|
+
title: 'Professionellt live motto',
|
|
60
|
+
html: '<p><strong>Transparens:</strong> När du kör en utlottning, kom ihåg att fånga skärmen där verktyget körs. Att visa din community den slumpartade urvalsprocessen i realtid är det bästa sättet att bygga en relation av förtroende och långsiktig lojalitet.</p>',
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
type: 'title',
|
|
64
|
+
text: 'Community Management: Moderations- och säkerhetsmodeller',
|
|
65
|
+
level: 2,
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
type: 'paragraph',
|
|
69
|
+
html: 'Communityn är en streamers mest värdefulla tillgång. Att växa utan struktur är kaotiskt. En community på 500 kan hanteras ensam, men vid 5000 behöver du system, tydliga regler och moderationsverktyg. Våra verktyg inkluderar utlottningsgeneratorer som även fungerar som system för rättvist deltagande: varje registrerad användare har exakt samma chans att vinna.',
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
type: 'paragraph',
|
|
73
|
+
html: 'Detta är särskilt viktigt vid utdelning av riktiga eller exklusiva priser. En upplevd orättvisa i en utlottning kan förstöra relationen med följare i månader. Därför är användningen av ett transparent system som bearbetar lokalt på din dator den bästa garantin för opartiskhet. Din community ser koden köras, litar på resultatet och fortsätter att komma tillbaka.',
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
type: 'title',
|
|
77
|
+
text: 'Infrastruktur och motståndskraft: När internetleverantören står i vägen',
|
|
78
|
+
level: 2,
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
type: 'paragraph',
|
|
82
|
+
html: 'Blockering av domäner av internetleverantörer eller nationella myndigheter blir allt vanligare 2026. Verktyg som Tebas-Check låter innehållsskapare verifiera om deras anslutning är föremål för restriktioner. Detta är kritiskt för skapare som distribuerar internationellt eller står inför regulatorisk granskning.',
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
type: 'paragraph',
|
|
86
|
+
html: 'Att veta om din anslutning granskas eller blockeras ger dig handlingsfrihet: du kan byta internetleverantör, använda lagliga proxyer eller förenkla din infrastruktur baserat på vad du upptäcker. En stream som lider av oväntade avbrott eller fördröjning kan bero på nätverksblockeringar, inte din utrustning.',
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
type: 'title',
|
|
90
|
+
text: 'Hållbar monetarisering: Från live till stabil inkomst',
|
|
91
|
+
level: 2,
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
type: 'paragraph',
|
|
95
|
+
html: 'Att förvandla streaming till en hållbar karriär kräver diversifierring. Prenumerationer, donationer, annonser, merch, kurser: varje källa behöver en engagerad publik. Gamification-verktyg som utlottningar är inte bara underhållning; de är psykologiska mekanismer som ökar kvarhållningen.',
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
type: 'paragraph',
|
|
99
|
+
html: 'Framgångsrika skapare använder beteendepsykologi: förstärkning med variabelt förhållande, milstolpar i communityn, säsongsbetonade evenemang. Våra verktyg automatiserar den slumpartade logiken så att du kan fokusera på din kreativa talang: underhålla, utbilda, ansluta. Den tekniska "rördragningen" är löst.',
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
type: 'title',
|
|
103
|
+
text: 'Omnikanal: Fragmenterad streaming kräver enhetliga verktyg',
|
|
104
|
+
level: 2,
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
type: 'paragraph',
|
|
108
|
+
html: 'En modern streamer sänder inte bara på Twitch. De streamar på Twitch, YouTube, Kick och Twitter/X samtidigt. Detta innebär att din utlottning måste vara rättvis även när deltagare kommer från flera plattformar. Våra verktyg är plattformsoberoende: importera en användarlista, kör väljaren, få en transparent vinnare.',
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
type: 'paragraph',
|
|
112
|
+
html: 'Detta omnikanals-tänk är framtiden. Plattformsfragmentering är permanent, och skapare som anpassar sig snabbt är de som trivs. Att ha en uppsättning verktyg som fungerar över alla plattformar är en konkurrensfördel.',
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
type: 'title',
|
|
116
|
+
text: 'Framtiden för live-innehåll 2026',
|
|
117
|
+
level: 2,
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
type: 'paragraph',
|
|
121
|
+
html: 'Trenden mot <strong>decentraliserad och multi-account streaming</strong> markerar vägen i år. Skapare är inte längre beroende av en enda plattform, och att ha en plattformsoberoende verktygsuppsättning är grundläggande. Dessa verktyg är designade för att vara den tekniska följeslagaren som följer med dig i varje sändning, oavsett var du streamar.',
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
type: 'stats',
|
|
125
|
+
columns: 2,
|
|
126
|
+
items: [
|
|
127
|
+
{ label: 'Slumpmässighet', value: 'Kryptografisk', icon: 'mdi:ticket' },
|
|
128
|
+
{ label: 'Nätverk', value: 'DNS-revision', icon: 'mdi:radar' },
|
|
129
|
+
{ label: 'Stream', value: 'Multi-Platt', icon: 'mdi:broadcast' },
|
|
130
|
+
{ label: 'Förtroende', value: 'Full trans', icon: 'mdi:shield-check' },
|
|
131
|
+
],
|
|
132
|
+
},
|
|
133
|
+
],
|
|
134
|
+
};
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import type { CategoryLocaleContent } from '../../types';
|
|
2
|
+
|
|
3
|
+
export const content: CategoryLocaleContent = {
|
|
4
|
+
slug: 'streaming',
|
|
5
|
+
title: 'Yayıncı ve İçerik Üretici Araçları',
|
|
6
|
+
description:
|
|
7
|
+
'Ücretsiz çevrimiçi araçlarla canlı yayınlarınızın etkileşimini ve güvenliğini artırın. Rastgele çekiliş seçiciler ve ISP ağ engelleme dedektörleri (Tebas-Check).',
|
|
8
|
+
seo: [
|
|
9
|
+
{
|
|
10
|
+
type: 'title',
|
|
11
|
+
text: '2026 Yayıncılık Ekosistemi: Etkileşim ve Ağ Egemenliği',
|
|
12
|
+
level: 2,
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
type: 'paragraph',
|
|
16
|
+
html: 'Yayıncılık, basit bir video iletiminden karmaşık etkileşimli ve sosyal bir ortama dönüştü. Bu bölümde, içeriklerini profesyonelleştirmek ve teknik altyapılarını korumak isteyen Twitch, YouTube ve Kick yayıncıları için tasarlanmış <strong>ücretsiz çevrimiçi araçlar</strong> sunuyoruz. Topluluğunuzu dinamikleştirme ve kaynaklarınızın kullanılabilirliğini sağlama yeteneği, başarılı bir kanalın temelidir.',
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
type: 'paragraph',
|
|
20
|
+
html: 'Adil ve şeffaf canlı çekiliş yönetiminden, ISP\'ler tarafından uygulanan ağ sansürü ve engelleme denetimine kadar, yardımcı araçlarımız size canlı içerik oluşturmanın rekabetçi dünyasında gezinmek için gerekli kontrolü sağlar.',
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
type: 'title',
|
|
24
|
+
text: 'Oyunlaştırma ve Topluluk: Şeffaf Çekilişler ve Yarışmalar',
|
|
25
|
+
level: 2,
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
type: 'paragraph',
|
|
29
|
+
html: 'Oyunlaştırma, izleyici tutmanın anahtarıdır. <strong>Çekiliş ve yarışma aracımız</strong>, tamamen şeffaf bir şekilde rastgele kazananlar seçilmesine olanak tanır. İşlemleri cihazınızda yerel olarak gerçekleştirerek dışarıdan müdahale olmamasını sağlar, canlı çekilişler sırasında takipçilerinizin güvenini kazanırsınız.',
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
type: 'tool',
|
|
33
|
+
tool: 'sorteo',
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
type: 'title',
|
|
37
|
+
text: 'Ağ Denetimi ve Tarafsızlık: Tebas-Check',
|
|
38
|
+
level: 2,
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
type: 'paragraph',
|
|
42
|
+
html: '2026\'nın dijital ortamında, adli engellemeler ve ISP kısıtlamaları yayınınızın istikrarını veya topluluğunuzun kaynaklarınıza erişimini etkileyebilir. <strong>Tebas-Check</strong>, operatörünüzün Cloudflare veya diğer içerik sağlayıcılar gibi altyapılar üzerinde sansür veya önleyici engellemeler uygulayıp uygulamadığını tespit eden, ağ tarafsızlığınızı denetlemenize olanak tanıyan teknik bir teşhis aracıdır.',
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
type: 'tool',
|
|
46
|
+
tool: 'tebas-check',
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
type: 'list',
|
|
50
|
+
items: [
|
|
51
|
+
'<strong>Dinamik Etkileşim:</strong> Adil ve şeffaf şans araçlarıyla topluluk katılımını teşvik edin.',
|
|
52
|
+
'<strong>Teknik Güvenlik:</strong> Bağlantınızı denetleyin ve yayın kalitenizi düşürebilecek ağ engellemelerini tespit edin.',
|
|
53
|
+
'<strong>Veri Gizliliği:</strong> Katılımcı listeleriniz de ağ teşhisleriniz de sunucularımızda saklanmaz.',
|
|
54
|
+
'<strong>Sıfır Gecikme:</strong> Yayın ekipmanınızdan aşırı kaynak tüketmeden canlı kullanım için optimize edilmiş araçlar.',
|
|
55
|
+
],
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
type: 'tip',
|
|
59
|
+
title: 'Profesyonel Canlı Yayın Mottosu',
|
|
60
|
+
html: '<p><strong>Şeffaflık:</strong> Bir çekiliş yaparken aracın çalıştığı ekranı yakalamayı unutmayın. Topluluğunuza rastgele seçim sürecini gerçek zamanlı olarak göstermek, uzun vadeli bir güven ve sadakat ilişkisi kurmanın en iyi yoludur.</p>',
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
type: 'title',
|
|
64
|
+
text: 'Topluluk Yönetimi: Moderasyon ve Güvenlik Modelleri',
|
|
65
|
+
level: 2,
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
type: 'paragraph',
|
|
69
|
+
html: 'Topluluk, bir yayıncının en değerli varlığıdır. Yapı olmadan büyümek kaotiktir. 500 kişilik bir topluluk tek başına yönetilebilir, ancak 5000 kişide sistemlere, net kurallara ve moderasyon araçlarına ihtiyacınız vardır. Yardımcı araçlarımız, aynı zamanda adil katılım sistemleri olarak da çalışan çekiliş jeneratörleri içerir: kayıtlı her kullanıcının kazanma şansı tamamen aynıdır.',
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
type: 'paragraph',
|
|
73
|
+
html: 'Bu, özellikle gerçek veya özel ödüller dağıtırken önemlidir. Bir çekilişte algılanan adaletsizlik, takipçi ilişkilerini aylarca zedeleyebilir. Bu nedenle, bilgisayarınızda yerel olarak işlem yapan şeffaf bir sistem kullanmak, tarafsızlığın en iyi garantisidir. Topluluğunuz kodun çalıştığını görür, sonuca güvenir ve geri gelmeye devam eder.',
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
type: 'title',
|
|
77
|
+
text: 'Altyapı ve Esneklik: ISP Yolunuza Çıktığında',
|
|
78
|
+
level: 2,
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
type: 'paragraph',
|
|
82
|
+
html: 'ISP\'ler veya ulusal makamlar tarafından alan adı engellenmesi 2026\'da giderek daha yaygın hale geliyor. Tebas-Check gibi araçlar, içerik üreticilerinin bağlantılarının kısıtlamalara tabi olup olmadığını doğrulamasını sağlar. Bu, uluslararası dağıtım yapan veya düzenleyici incelemelerle karşı karşıya kalan içerik üreticileri için kritiktir.',
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
type: 'paragraph',
|
|
86
|
+
html: 'Bağlantınızın denetlenip denetlenmediğini veya engellenip engellenmediğini bilmek size hareket alanı sağlar: ISP değiştirebilir, yasal proxyler kullanabilir veya keşfettiğiniz verilere dayanarak altyapınızı basitleştirebilirsiniz. Beklenmedik düşüşler veya gecikmeler yaşayan bir yayın, ekipmanınızdan değil, ağ engellemelerinden kaynaklanıyor olabilir.',
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
type: 'title',
|
|
90
|
+
text: 'Sürdürülebilir Para Kazanma: Canlı Yayından İstikrarlı Gelire',
|
|
91
|
+
level: 2,
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
type: 'paragraph',
|
|
95
|
+
html: 'Yayıncılığı sürdürülebilir bir kariyere dönüştürmek çeşitlilik gerektirir. Abonelikler, bağışlar, reklamlar, ürünler, kurslar: her kaynak etkileşimli bir kitleye ihtiyaç duyar. Çekilişler gibi oyunlaştırma araçları sadece eğlence değildir; izleyici tutmayı artıran psikolojik mekanizmalardır.',
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
type: 'paragraph',
|
|
99
|
+
html: 'Başarılı içerik üreticileri davranış psikolojisini kullanır: değişken oranlı pekiştirme, topluluk kilometre taşları, sezonluk etkinlikler. Araçlarımız rastgele mantığı otomatikleştirir, böylece siz yaratıcı yeteneğinize odaklanabilirsiniz: eğlendirme, eğitme, bağlantı kurma. Teknik "tesisat" çözüldü.',
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
type: 'title',
|
|
103
|
+
text: 'Çok Kanallı Yayın: Parçalanmış Yayıncılık Birleşik Araçlar Gerektirir',
|
|
104
|
+
level: 2,
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
type: 'paragraph',
|
|
108
|
+
html: 'Modern bir yayıncı sadece Twitch\'te yayın yapmaz. Aynı anda Twitch, YouTube, Kick ve Twitter/X\'te yayın yaparlar. Bu, çekilişinizin katılımcılar birden fazla platformdan gelse bile adil olması gerektiği anlamına gelir. Araçlarımız platformdan bağımsızdır: bir kullanıcı listesi içe aktarın, seçiciyi çalıştırın, şeffaf bir kazanan elde edin.',
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
type: 'paragraph',
|
|
112
|
+
html: 'Bu çok kanallı yaklaşım gelecektir. Platform parçalanması kalıcıdır ve hızla uyum sağlayan içerik üreticileri başarılı olanlardır. Herhangi bir platformda çalışan bir yardımcı araç setine sahip olmak rekabet avantajıdır.',
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
type: 'title',
|
|
116
|
+
text: 'Canlı İçeriğin Geleceği 2026',
|
|
117
|
+
level: 2,
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
type: 'paragraph',
|
|
121
|
+
html: '<strong>Merkezi olmayan ve çoklu hesap üzerinden yayıncılık</strong> eğilimi bu yıl yolu belirliyor. İçerik üreticileri artık tek bir platforma bağımlı değil ve platformdan bağımsız bir yardımcı araç setine sahip olmak temeldir. Bu araçlar, nerede yayın yaparsanız yapın her yayında yanınızda olan o teknik arkadaş olacak şekilde tasarlanmıştır.',
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
type: 'stats',
|
|
125
|
+
columns: 2,
|
|
126
|
+
items: [
|
|
127
|
+
{ label: 'Rastgelelik', value: 'Kriptografik', icon: 'mdi:ticket' },
|
|
128
|
+
{ label: 'Ağ', value: 'DNS Denetimi', icon: 'mdi:radar' },
|
|
129
|
+
{ label: 'Yayın', value: 'Çoklu Platform', icon: 'mdi:broadcast' },
|
|
130
|
+
{ label: 'Güven', value: 'Tam Şeffaf', icon: 'mdi:shield-check' },
|
|
131
|
+
],
|
|
132
|
+
},
|
|
133
|
+
],
|
|
134
|
+
};
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import type { CategoryLocaleContent } from '../../types';
|
|
2
|
+
|
|
3
|
+
export const content: CategoryLocaleContent = {
|
|
4
|
+
slug: 'streaming',
|
|
5
|
+
title: '直播与内容创作者工具',
|
|
6
|
+
description:
|
|
7
|
+
'通过免费的在线工具增强直播的互动性和安全性。随机抽奖选择器和 ISP 网络封锁检测器 (Tebas-Check)。',
|
|
8
|
+
seo: [
|
|
9
|
+
{
|
|
10
|
+
type: 'title',
|
|
11
|
+
text: '2026 年直播生态系统:互动与网络主权',
|
|
12
|
+
level: 2,
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
type: 'paragraph',
|
|
16
|
+
html: '直播已从简单的视频传输演变为复杂的互动和社会环境。在本板块中,我们为希望实现内容专业化并保护技术基础设施的 Twitch、YouTube 和 Kick 主播提供<strong>免费在线工具</strong>。激活社区并确保资源可用性的能力是成功频道的基础。',
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
type: 'paragraph',
|
|
20
|
+
html: '从公平透明的现场抽奖管理,到 ISP 实施的网络审查和封锁审计,我们的实用工具为您提供在竞争激烈的现实内容创作世界中航行所需的控制力。',
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
type: 'title',
|
|
24
|
+
text: '游戏化与社区:透明的抽奖与竞赛',
|
|
25
|
+
level: 2,
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
type: 'paragraph',
|
|
29
|
+
html: '游戏化是留住观众的关键。我们的<strong>抽奖和竞赛工具</strong>允许以完全透明的方式选择随机获胜者。通过在您的终端本地进行处理,您可以确保没有外部干预,从而在现场抽奖期间培养追随者的信任。',
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
type: 'tool',
|
|
33
|
+
tool: 'sorteo',
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
type: 'title',
|
|
37
|
+
text: '网络审计与中立性:Tebas-Check',
|
|
38
|
+
level: 2,
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
type: 'paragraph',
|
|
42
|
+
html: '在 2026 年的数字环境中,司法封锁和 ISP 限制可能会影响直播的稳定性或社区对资源的访问。<strong>Tebas-Check</strong> 是一款技术诊断工具,可检测您的运营商是否对 Cloudflare 等基础设施或其他内容提供商实施审查或预防性封锁,让您可以审计自己的网络中立性。',
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
type: 'tool',
|
|
46
|
+
tool: 'tebas-check',
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
type: 'list',
|
|
50
|
+
items: [
|
|
51
|
+
'<strong>动态互动:</strong> 通过公平透明的机会工具鼓励社区参与。',
|
|
52
|
+
'<strong>技术安全:</strong> 审计您的连接并检测可能降低直播质量的网络封锁。',
|
|
53
|
+
'<strong>数据隐私:</strong> 您的参与者列表和网络诊断均不会存储在我们的服务器上。',
|
|
54
|
+
'<strong>零延迟:</strong> 为现场使用而优化的工具,不会过度消耗直播设备的资源。',
|
|
55
|
+
],
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
type: 'tip',
|
|
59
|
+
title: '职业直播信条',
|
|
60
|
+
html: '<p><strong>透明度:</strong> 进行抽奖时,请记住截取运行工具的屏幕。向社区实时展示随机选择过程是建立长期信任和忠诚关系的平衡之道。</p>',
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
type: 'title',
|
|
64
|
+
text: '社区管理:调节与安全模型',
|
|
65
|
+
level: 2,
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
type: 'paragraph',
|
|
69
|
+
html: '社区是主播最宝贵的资产。没有结构的增长是混乱的。500 人的社区可以独自管理,但达到 5000 人时,您需要系统、明确的规则和调节工具。我们的实用工具包括抽奖生成器,它也可以作为公平竞争的参与系统:每位注册用户都有完全相同的获胜机会。',
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
type: 'paragraph',
|
|
73
|
+
html: '这在发放实物或专属奖励时尤为重要。抽奖中感知到的不公正可能会在数月内破坏追随者关系。这就是为什么使用在您计算机上本地处理的透明系统是公正性的最佳保证。您的社区看到代码运行,信任结果,并不断回来。',
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
type: 'title',
|
|
77
|
+
text: '基础设施与弹性:当 ISP 阻碍时',
|
|
78
|
+
level: 2,
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
type: 'paragraph',
|
|
82
|
+
html: '到 2026 年,ISP 或国家当局封锁域名的情况越来越普遍。Tebas-Check 等工具允许内容创作者验证其连接是否受到限制。这对于在国际范围内分发内容或面临监管审查的创作者来说至关重要。',
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
type: 'paragraph',
|
|
86
|
+
html: '了解您的连接是否正在被审计或封锁,可以赋予您自主权:您可以更换 ISP、使用合法代理,或根据您的发现简化基础设施。直播出现意外掉线或延迟可能是由于网络封锁,而非您的设备问题。',
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
type: 'title',
|
|
90
|
+
text: '可持续变现:从直播到稳定收入',
|
|
91
|
+
level: 2,
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
type: 'paragraph',
|
|
95
|
+
html: '将直播转变为可持续的职业需要多元化。订阅、捐赠、广告、周边、课程:每个来源都需要参与度高的观众。像抽奖这样的游戏化工具不仅仅是娱乐,它们也是提高留存率的心理机制。',
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
type: 'paragraph',
|
|
99
|
+
html: '成功的创作者利用行为心理学:可变比例强化、社区里程碑、季节性活动。我们的工具自动化了随机逻辑,因此您可以专注于您的创意天赋:娱乐、教育、连接。技术“管道”问题已解决。',
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
type: 'title',
|
|
103
|
+
text: '全渠道:分散的直播需要统一的工具',
|
|
104
|
+
level: 2,
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
type: 'paragraph',
|
|
108
|
+
html: '现代主播不仅仅在 Twitch 上广播。他们同时在 Twitch、YouTube、Kick 和 Twitter/X 上直播。这意味着即使参与者来自多个平台,您的抽奖也必须公平。我们的工具与平台无关:导入用户列表,运行选择器,获得透明的获胜者。',
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
type: 'paragraph',
|
|
112
|
+
html: '这种全渠道方法就是未来。平台碎片化是永久性的,能够快速适应的创作者才能茁壮成长。拥有一套跨任何平台运行的实用工具是一种竞争优势。',
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
type: 'title',
|
|
116
|
+
text: '2026 年现场内容的未来',
|
|
117
|
+
level: 2,
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
type: 'paragraph',
|
|
121
|
+
html: '<strong>去中心化和多账号直播</strong>的趋势标志着今年的发展方向。创作者不再依赖单一平台,拥有一套与平台无关的实用工具至关重要。这些工具旨在成为伴随您完成每次广播的技术伴侣,无论您在何处直播。',
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
type: 'stats',
|
|
125
|
+
columns: 2,
|
|
126
|
+
items: [
|
|
127
|
+
{ label: '随机性', value: '加密级', icon: 'mdi:ticket' },
|
|
128
|
+
{ label: '网络', value: 'DNS 审计', icon: 'mdi:radar' },
|
|
129
|
+
{ label: '直播', value: '多平台', icon: 'mdi:broadcast' },
|
|
130
|
+
{ label: '信任', value: '完全透明', icon: 'mdi:shield-check' },
|
|
131
|
+
],
|
|
132
|
+
},
|
|
133
|
+
],
|
|
134
|
+
};
|
package/src/category/index.ts
CHANGED
|
@@ -8,5 +8,17 @@ export const streamingCategory: StreamingCategoryEntry = {
|
|
|
8
8
|
es: () => import('./i18n/es').then((m) => m.content),
|
|
9
9
|
en: () => import('./i18n/en').then((m) => m.content),
|
|
10
10
|
fr: () => import('./i18n/fr').then((m) => m.content),
|
|
11
|
+
de: () => import('./i18n/de').then((m) => m.content),
|
|
12
|
+
id: () => import('./i18n/id').then((m) => m.content),
|
|
13
|
+
it: () => import('./i18n/it').then((m) => m.content),
|
|
14
|
+
ja: () => import('./i18n/ja').then((m) => m.content),
|
|
15
|
+
ko: () => import('./i18n/ko').then((m) => m.content),
|
|
16
|
+
nl: () => import('./i18n/nl').then((m) => m.content),
|
|
17
|
+
pl: () => import('./i18n/pl').then((m) => m.content),
|
|
18
|
+
pt: () => import('./i18n/pt').then((m) => m.content),
|
|
19
|
+
ru: () => import('./i18n/ru').then((m) => m.content),
|
|
20
|
+
sv: () => import('./i18n/sv').then((m) => m.content),
|
|
21
|
+
tr: () => import('./i18n/tr').then((m) => m.content),
|
|
22
|
+
zh: () => import('./i18n/zh').then((m) => m.content),
|
|
11
23
|
},
|
|
12
24
|
};
|
package/src/index.ts
CHANGED
|
@@ -15,7 +15,7 @@ export type {
|
|
|
15
15
|
ToolDefinition,
|
|
16
16
|
} from './types';
|
|
17
17
|
|
|
18
|
-
export { ALL_TOOLS } from './tools';
|
|
18
|
+
export { ALL_ENTRIES, ALL_TOOLS } from './tools';
|
|
19
19
|
|
|
20
20
|
export { SorteoComponent, SorteoSEO, SorteoBibliography } from './tool/sorteo';
|
|
21
21
|
export { SORTEO_TOOL } from './tool/sorteo/index';
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { ALL_TOOLS } from '../tools';
|
|
3
|
+
|
|
4
|
+
const EXPECTED_LOCALES = [
|
|
5
|
+
'de', 'en', 'es', 'fr', 'id', 'it', 'ja', 'ko', 'nl', 'pl', 'pt', 'ru', 'sv', 'tr', 'zh'
|
|
6
|
+
];
|
|
7
|
+
|
|
8
|
+
describe('I18n Coverage Validation', () => {
|
|
9
|
+
it('all tools should be registered', () => {
|
|
10
|
+
expect(ALL_TOOLS.length).toBeGreaterThan(0);
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
ALL_TOOLS.forEach(({ entry }: { entry: any }) => {
|
|
14
|
+
describe(`Tool: ${entry.id}`, () => {
|
|
15
|
+
it('should have all 15 required locales', () => {
|
|
16
|
+
const registeredLocales = Object.keys(entry.i18n);
|
|
17
|
+
EXPECTED_LOCALES.forEach((locale) => {
|
|
18
|
+
expect(
|
|
19
|
+
registeredLocales,
|
|
20
|
+
`Tool "${entry.id}" is missing locale "${locale}"`,
|
|
21
|
+
).toContain(locale);
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
it('all locale loaders should be functions', () => {
|
|
26
|
+
EXPECTED_LOCALES.forEach((locale) => {
|
|
27
|
+
const loader = entry.i18n[locale as keyof typeof entry.i18n];
|
|
28
|
+
expect(
|
|
29
|
+
typeof loader,
|
|
30
|
+
`Tool "${entry.id}" locale "${locale}" loader is not a function`,
|
|
31
|
+
).toBe('function');
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
});
|
|
@@ -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
|
+
});
|