@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,256 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { SorteoUI } from '../ui';
|
|
4
|
+
|
|
5
|
+
const slug = 'estrazione-nomi';
|
|
6
|
+
const title = 'Generatore Nomi Casuali per Streaming';
|
|
7
|
+
const description =
|
|
8
|
+
'Scegli un vincitore a caso da una lista di nomi. Strumento per giveaway gratuito, veloce e visuale per Twitch, YouTube ed eventi.';
|
|
9
|
+
|
|
10
|
+
const faqData = [
|
|
11
|
+
{
|
|
12
|
+
question: 'L\'estrazione è davvero casuale?',
|
|
13
|
+
answer:
|
|
14
|
+
'Sì, utilizziamo l\'algoritmo di casualità crittografica del browser (Web Crypto API) per garantire che ogni partecipante abbia esattamente la stessa probabilità di vincere, senza pregiudizi o manipolazioni.',
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
question: 'Posso usare questo generatore su Twitch o YouTube?',
|
|
18
|
+
answer:
|
|
19
|
+
'Assolutamente sì. Essendo uno strumento web, puoi catturare la finestra con OBS o condividere direttamente lo schermo. Il design pulito e le animazioni sono pensati affinché il pubblico veda il processo con totale trasparenza.',
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
question: 'Come posso evitare che qualcuno partecipi due volte?',
|
|
23
|
+
answer:
|
|
24
|
+
'Lo strumento ha una funzione automatica di "pulizia duplicati" che rileva nomi identici o con piccole variazioni di spaziatura per garantire che ogni persona reale conti una sola volta.',
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
question: 'Posso estrarre più vincitori contemporaneamente?',
|
|
28
|
+
answer:
|
|
29
|
+
'Sì, puoi configurare il numero di vincitori desiderati prima di cliccare sul pulsante. Lo strumento elencherà i fortunati in modo chiaro affinché tu possa menzionarli nella tua diretta.',
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
question: 'Quanti nomi posso aggiungere alla lista?',
|
|
33
|
+
answer:
|
|
34
|
+
'Non c\'è un limite rigoroso imposto dallo strumento. Abbiamo ottimizzato il motore per gestire liste di migliaia di partecipanti senza problemi di prestazioni, rendendolo ideale anche per giveaway massivi.',
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
question: 'I miei dati o la lista dei partecipanti vengono salvati?',
|
|
38
|
+
answer:
|
|
39
|
+
'No, mai. La tua privacy viene prima di tutto. L\'intero processo di estrazione avviene localmente nel tuo browser web. I nomi inseriti non vengono mai inviati ai nostri server né memorizzati in alcun database.',
|
|
40
|
+
},
|
|
41
|
+
];
|
|
42
|
+
|
|
43
|
+
const howToData = [
|
|
44
|
+
{
|
|
45
|
+
name: 'Prepara la lista dei partecipanti',
|
|
46
|
+
text: 'Copia la lista dei nomi dalla tua chat, da Excel o dai social network e incollala nella casella di testo.',
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
name: 'Configura le opzioni del giveaway',
|
|
50
|
+
text: 'Scegli di quanti vincitori hai bisogno e se vuoi filtrare i duplicati o i nomi vuoti.',
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
name: 'Lancia la "mano innocente"',
|
|
54
|
+
text: 'Clicca sul pulsante di estrazione. Un\'animazione visiva manterrà la tensione prima di svelare il vincitore.',
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
name: 'Annuncia i risultati',
|
|
58
|
+
text: 'Copia i nomi dei vincitori per condividerli sui tuoi social network o nella chat dello streaming.',
|
|
59
|
+
},
|
|
60
|
+
];
|
|
61
|
+
|
|
62
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
63
|
+
'@context': 'https://schema.org',
|
|
64
|
+
'@type': 'FAQPage',
|
|
65
|
+
mainEntity: faqData.map((item) => ({
|
|
66
|
+
'@type': 'Question',
|
|
67
|
+
name: item.question,
|
|
68
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
69
|
+
})),
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
const howToSchema: WithContext<HowTo> = {
|
|
73
|
+
'@context': 'https://schema.org',
|
|
74
|
+
'@type': 'HowTo',
|
|
75
|
+
name: title,
|
|
76
|
+
description,
|
|
77
|
+
step: howToData.map((step, i) => ({
|
|
78
|
+
'@type': 'HowToStep',
|
|
79
|
+
position: i + 1,
|
|
80
|
+
name: step.name,
|
|
81
|
+
text: step.text,
|
|
82
|
+
})),
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
86
|
+
'@context': 'https://schema.org',
|
|
87
|
+
'@type': 'SoftwareApplication',
|
|
88
|
+
name: title,
|
|
89
|
+
description,
|
|
90
|
+
applicationCategory: 'UtilityApplication',
|
|
91
|
+
operatingSystem: 'All',
|
|
92
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
93
|
+
inLanguage: 'it',
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
export const content: ToolLocaleContent<SorteoUI> = {
|
|
97
|
+
slug,
|
|
98
|
+
title,
|
|
99
|
+
description,
|
|
100
|
+
faqTitle: 'Domande Frequenti',
|
|
101
|
+
faq: faqData,
|
|
102
|
+
bibliographyTitle: 'Riferimenti Tecnici',
|
|
103
|
+
bibliography: [
|
|
104
|
+
{
|
|
105
|
+
name: 'Web Crypto API: getRandomValues()',
|
|
106
|
+
url: 'https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues',
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
name: 'Algoritmo Fisher-Yates Shuffle',
|
|
110
|
+
url: 'https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle',
|
|
111
|
+
},
|
|
112
|
+
],
|
|
113
|
+
howTo: howToData,
|
|
114
|
+
schemas: [faqSchema as any, howToSchema as any, appSchema as any],
|
|
115
|
+
seo: [
|
|
116
|
+
{
|
|
117
|
+
type: 'title',
|
|
118
|
+
text: 'Estrattore Nomi Casuali e Lista Partecipanti Online',
|
|
119
|
+
level: 2,
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
type: 'paragraph',
|
|
123
|
+
html: 'Ti stai chiedendo come fare un giveaway online in modo rapido, sicuro e totalmente trasparente? Il nostro strumento gratuito di <strong>Estrazione Nomi</strong> è la soluzione definitiva per scegliere un vincitore a caso in pochi secondi. Progettato per essere semplice, visuale ed efficace, è perfetto per qualsiasi scenario in cui hai bisogno di una "mano innocente" digitale.',
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
type: 'paragraph',
|
|
127
|
+
html: 'Sia che tu stia gestendo un concorso sui social network, un giveaway massivo sul tuo canale streaming o semplicemente decidendo a chi tocca buttare la spazzatura oggi, il nostro selettore casuale garantisce totale imparzialità grazie ai moderni algoritmi crittografici. <strong>Nessuna manipolazione, nessun pregiudizio, solo pura casualità.</strong>'
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
type: 'title',
|
|
131
|
+
text: 'Casi d\'uso',
|
|
132
|
+
level: 3,
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
type: 'comparative',
|
|
136
|
+
columns: 2,
|
|
137
|
+
items: [
|
|
138
|
+
{
|
|
139
|
+
title: 'Giveaway sui Social Media',
|
|
140
|
+
description: 'Ideale per concorsi su Instagram, Twitter (X) o Facebook. Basta copiare i nomi dai commenti e incollarli per scegliere un vincitore equo. Lo strumento rimuove automaticamente i duplicati.',
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
title: 'Twitch / YouTube Streaming',
|
|
144
|
+
description: 'Grazie alla nostra Modalità Studio con animazioni fluide e suoni integrati, puoi condividere lo schermo direttamente su OBS e offrire uno spettacolo visivo eccitante al tuo pubblico mentre scegli i vincitori dal vivo.',
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
title: 'Dinamiche di Classe e di Team',
|
|
148
|
+
description: 'Insegnanti e team leader possono usarlo per formare gruppi casuali, scegliere chi presenta per primo o assegnare compiti a caso con totale trasparenza e senza favoritismi.',
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
title: 'Babbo Natale Segreto ed Eventi',
|
|
152
|
+
description: 'Semplifica l\'organizzazione di eventi familiari, estrazioni in ufficio o Babbo Natale Segreto scegliendo i nomi a caso istantaneamente senza bisogno di foglietti o logistica complicata.',
|
|
153
|
+
},
|
|
154
|
+
],
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
type: 'title',
|
|
158
|
+
text: 'Perché il nostro strumento è diverso?',
|
|
159
|
+
level: 3,
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
type: 'list',
|
|
163
|
+
items: [
|
|
164
|
+
'<strong>Criptografia Reale:</strong> Utilizziamo la Web Crypto API del browser (standard W3C) invece di deboli generatori pseudo-casuali. Ogni estrazione è matematicamente imparziale.',
|
|
165
|
+
'<strong>Nessuna Archiviazione:</strong> I tuoi dati non lasciano mai il browser. Non vendiamo liste, non facciamo profilazione, non memorizziamo nulla. Elaborazione puramente locale.',
|
|
166
|
+
'<strong>Design Visuale:</strong> La modalità cinema e le animazioni rendono ogni giveaway un evento memorabile. Perfetto per la cattura con OBS o le dirette streaming.',
|
|
167
|
+
'<strong>Gestione Duplicati:</strong> Rileva automaticamente nomi ripetuti o varianti (spazi extra, maiuscole, ecc.) per garantire che ogni persona reale conti una sola volta.',
|
|
168
|
+
],
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
type: 'title',
|
|
172
|
+
text: 'Come usare il giveaway passo dopo passo',
|
|
173
|
+
level: 3,
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
type: 'list',
|
|
177
|
+
items: [
|
|
178
|
+
'<strong>Passaggio 1 - Inserisci i partecipanti:</strong> Incolla la tua lista di nomi nella casella di testo principale. Lo strumento rileva automaticamente ogni riga come un partecipante diverso. Hai dei duplicati? Nessun problema, lo strumento li rimuove.',
|
|
179
|
+
'<strong>Passaggio 2 - Personalizza:</strong> Nella scheda impostazioni puoi attivare il conto alla rovescia per creare tensione, l\'effetto coriandoli per festeggiare, o attivare la "lista nera" per escludere certi nomi.',
|
|
180
|
+
'<strong>Passaggio 3 - Estrai!</strong> Clicca sul pulsante principale e il nostro motore genererà una selezione casuale crittograficamente sicura. I vincitori saranno visualizzati in modo chiaro e memorabile.',
|
|
181
|
+
],
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
type: 'title',
|
|
185
|
+
text: 'Voci Ponderate: Dai un Vantaggio ad Alcuni Partecipanti',
|
|
186
|
+
level: 3,
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
type: 'paragraph',
|
|
190
|
+
html: 'Vuoi premiare i tuoi iscritti più fedeli o dare più opportunità a certi partecipanti? Il nostro sistema di <strong>Voci Ponderate</strong> è unico e ti permette di assegnare un "peso" o moltiplicatore a qualsiasi nome senza doverlo scrivere più volte.',
|
|
191
|
+
},
|
|
192
|
+
{
|
|
193
|
+
type: 'tip',
|
|
194
|
+
title: 'Come assegnare i pesi ai nomi',
|
|
195
|
+
html: '<p>Usa un asterisco (*) o una "x" seguita dal numero di partecipazioni. Esempi:</p><ul><li><strong>"Mario * 5"</strong> - Mario partecipa come se fosse 5 persone</li><li><strong>"Maria x 10"</strong> - Maria ha 10 volte più possibilità</li><li><strong>"Pietro"</strong> - Nessun simbolo = 1 voce regolare</li></ul><p>Questo è perfetto per giveaway in cui vuoi dare un vantaggio agli iscritti VIP o agli utenti speciali.</p>',
|
|
196
|
+
},
|
|
197
|
+
{
|
|
198
|
+
type: 'title',
|
|
199
|
+
text: 'Privacy e Sicurezza Totale',
|
|
200
|
+
level: 3,
|
|
201
|
+
},
|
|
202
|
+
{
|
|
203
|
+
type: 'paragraph',
|
|
204
|
+
html: 'A differenza di altri strumenti online, <strong>non memorizziamo i tuoi dati</strong>. Tutta l\'elaborazione dei nomi e l\'esecuzione dell\'estrazione avviene localmente nel tuo browser. Le tue liste di partecipanti non viaggiano mai sulla rete né vengono salvate su alcun server esterno.',
|
|
205
|
+
},
|
|
206
|
+
{
|
|
207
|
+
type: 'paragraph',
|
|
208
|
+
html: '<strong>Cosa significa?</strong> La tua lista dei partecipanti è tua e solo tua. Chiudendo la scheda, scompare. Niente cookie di tracciamento, niente profili utente, niente database centrale. Massima privacy garantita per te e per chi partecipa ai tuoi giveaway.',
|
|
209
|
+
},
|
|
210
|
+
{
|
|
211
|
+
type: 'title',
|
|
212
|
+
text: 'Trasparenza Matematica',
|
|
213
|
+
level: 3,
|
|
214
|
+
},
|
|
215
|
+
{
|
|
216
|
+
type: 'paragraph',
|
|
217
|
+
html: 'Qualcuno potrebbe chiedersi: "E se manipolaste i risultati?". La risposta è semplice: <strong>non possiamo</strong>. Il codice dell\'estrazione è deterministico e crittografico. Niente variabili nascoste, niente "trucchi sul palco".',
|
|
218
|
+
},
|
|
219
|
+
{
|
|
220
|
+
type: 'paragraph',
|
|
221
|
+
html: 'Ogni vincitore è il risultato diretto dell\'algoritmo Fisher-Yates Shuffle applicato alla tua lista esatta, utilizzando una reale entropia crittografica. Se vuoi controllare il processo, il codice è disponibile su GitHub per l\'ispezione pubblica.',
|
|
222
|
+
},
|
|
223
|
+
],
|
|
224
|
+
ui: {
|
|
225
|
+
faqTitle: 'Domande Frequenti',
|
|
226
|
+
bibliographyTitle: 'Riferimenti Tecnici',
|
|
227
|
+
title: 'Giveaway Casuale',
|
|
228
|
+
totalParticipants: 'Partecipanti Unici Totali',
|
|
229
|
+
ready: 'PRONTO',
|
|
230
|
+
participants: 'Partecipanti',
|
|
231
|
+
settings: 'Impostazioni',
|
|
232
|
+
importFile: 'Importa File',
|
|
233
|
+
clearAll: 'Cancella tutto',
|
|
234
|
+
placeholder: 'Digita o incolla i nomi qui...\nMario Rossi\nMaria Bianchi\n@utente_twitch',
|
|
235
|
+
onePerLine: '1 partecipante per riga',
|
|
236
|
+
lines: 'righe',
|
|
237
|
+
filters: 'Filtri',
|
|
238
|
+
allowDuplicates: 'Permetti Duplicati',
|
|
239
|
+
winnerCount: 'Numero di Vincitori',
|
|
240
|
+
autoRemove: 'Rimuovi Vincitore Automaticamente',
|
|
241
|
+
blacklist: 'Lista Nera (Escludi)',
|
|
242
|
+
blacklistPlaceholder: 'Nomi vietati (uno per riga)...',
|
|
243
|
+
blacklistInfo: 'Questi utenti non parteciperanno all\'estrazione.',
|
|
244
|
+
sceneEffects: 'Effetti Scena',
|
|
245
|
+
countdown: 'Conto alla rovescia (3s)',
|
|
246
|
+
confetti: 'Coriandoli Vittoria',
|
|
247
|
+
zenMode: 'Modalità Zen (Nascondi Pannello)',
|
|
248
|
+
waitingParticipants: 'In attesa di partecipanti...',
|
|
249
|
+
winner: 'VINCITORE',
|
|
250
|
+
reroll: 'Estrai di nuovo',
|
|
251
|
+
history: 'Cronologia della sessione',
|
|
252
|
+
noWinnersYet: 'Ancora nessun vincitore...',
|
|
253
|
+
startGiveaway: 'Inizia Giveaway',
|
|
254
|
+
studioHeader: 'LIVE STUDIO v2.0',
|
|
255
|
+
},
|
|
256
|
+
};
|
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { SorteoUI } from '../ui';
|
|
4
|
+
|
|
5
|
+
const slug = 'giveaway';
|
|
6
|
+
const title = '配信向けランダム名前抽選器';
|
|
7
|
+
const description =
|
|
8
|
+
'名前のリストから勝者をランダムに選びます。Twitch、YouTube、イベント向けの、無料で高速、かつ視覚的な抽選ツールです。';
|
|
9
|
+
|
|
10
|
+
const faqData = [
|
|
11
|
+
{
|
|
12
|
+
question: 'この抽選は本当にランダムですか?',
|
|
13
|
+
answer:
|
|
14
|
+
'はい。ブラウザの暗号化乱数アルゴリズム(Web Crypto API)を使用して、バイアスや操作なしに、各参加者が全く同じ確率で当選するようにしています。',
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
question: 'この抽選器をTwitchやYouTubeで使用できますか?',
|
|
18
|
+
answer:
|
|
19
|
+
'もちろんです。ウェブツールなので、OBSでウィンドウをキャプチャしたり、画面を直接共有したりできます。クリーンなデザインとアニメーションは、視聴者がプロセスを完全に透明に確認できるように設計されています。',
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
question: '一人が二回参加するのを防ぐにはどうすればよいですか?',
|
|
23
|
+
answer:
|
|
24
|
+
'ツールには自動の「重複クリーニング」機能があり、同一の名前やスペースのわずかな違いがある名前を検出して、実在する一人が一回だけカウントされるようにします。',
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
question: '一度に複数の当選者を選ぶことはできますか?',
|
|
28
|
+
answer:
|
|
29
|
+
'はい。ボタンをクリックする前に、希望する当選者数を設定できます。ツールは当選者を明確にリストアップするので、ライブ配信中に名前を読み上げることができます。',
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
question: 'リストに何人まで名前を追加できますか?',
|
|
33
|
+
answer:
|
|
34
|
+
'ツールによる厳密な制限はありません。数千人の参加者リストでもパフォーマンスの問題なく処理できるようにエンジンを最適化しており、大規模な抽選にも理想的です。',
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
question: '私のデータや参加者リストは保存されますか?',
|
|
38
|
+
answer:
|
|
39
|
+
'いいえ、決して保存されません。あなたのプライバシーが第一です。抽選プロセス全体がウェブブラウザ内でローカルに実行されます。入力した名前が弊社のサーバーに送信されたり、データベースに保存されたりすることはありません。',
|
|
40
|
+
},
|
|
41
|
+
];
|
|
42
|
+
|
|
43
|
+
const howToData = [
|
|
44
|
+
{
|
|
45
|
+
name: '参加者リストを準備する',
|
|
46
|
+
text: 'チャット、Excel、またはSNSから名前のリストをコピーして、テキストボックスに貼り付けます。',
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
name: '抽選オプションを設定する',
|
|
50
|
+
text: '必要な当選者数と、重複や空の名前をフィルタリングするかどうかを選択します。',
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
name: '「清き一票(抽選)」を実行する',
|
|
54
|
+
text: '抽選ボタンをクリックします。視覚的なアニメーションが、勝者が発表されるまでの緊張感を高めます。',
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
name: '結果を発表する',
|
|
58
|
+
text: '当選者の名前をコピーして、SNSや配信チャットで共有します。',
|
|
59
|
+
},
|
|
60
|
+
];
|
|
61
|
+
|
|
62
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
63
|
+
'@context': 'https://schema.org',
|
|
64
|
+
'@type': 'FAQPage',
|
|
65
|
+
mainEntity: faqData.map((item) => ({
|
|
66
|
+
'@type': 'Question',
|
|
67
|
+
name: item.question,
|
|
68
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
69
|
+
})),
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
const howToSchema: WithContext<HowTo> = {
|
|
73
|
+
'@context': 'https://schema.org',
|
|
74
|
+
'@type': 'HowTo',
|
|
75
|
+
name: title,
|
|
76
|
+
description,
|
|
77
|
+
step: howToData.map((step, i) => ({
|
|
78
|
+
'@type': 'HowToStep',
|
|
79
|
+
position: i + 1,
|
|
80
|
+
name: step.name,
|
|
81
|
+
text: step.text,
|
|
82
|
+
})),
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
86
|
+
'@context': 'https://schema.org',
|
|
87
|
+
'@type': 'SoftwareApplication',
|
|
88
|
+
name: title,
|
|
89
|
+
description,
|
|
90
|
+
applicationCategory: 'UtilityApplication',
|
|
91
|
+
operatingSystem: 'All',
|
|
92
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'USD' },
|
|
93
|
+
inLanguage: 'ja',
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
export const content: ToolLocaleContent<SorteoUI> = {
|
|
97
|
+
slug,
|
|
98
|
+
title,
|
|
99
|
+
description,
|
|
100
|
+
faqTitle: 'よくある質問',
|
|
101
|
+
faq: faqData,
|
|
102
|
+
bibliographyTitle: '技術リファレンス',
|
|
103
|
+
bibliography: [
|
|
104
|
+
{
|
|
105
|
+
name: 'Web Crypto API: getRandomValues()',
|
|
106
|
+
url: 'https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues',
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
name: 'フィッシャー–イェーツのシャッフル アルゴリズム',
|
|
110
|
+
url: 'https://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A3%E3%83%83%E3%82%B7%E3%83%A3%E3%83%BC%E2%80%93%E3%82%A4%E3%82%A7%E3%83%BC%E3%83%84%E3%81%AE%E3%82%B7%E3%83%A3%E3%83%83%E3%83%95%E3%83%AB',
|
|
111
|
+
},
|
|
112
|
+
],
|
|
113
|
+
howTo: howToData,
|
|
114
|
+
schemas: [faqSchema as any, howToSchema as any, appSchema as any],
|
|
115
|
+
seo: [
|
|
116
|
+
{
|
|
117
|
+
type: 'title',
|
|
118
|
+
text: 'オンライン ランダム名前抽選器・参加者リスト',
|
|
119
|
+
level: 2,
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
type: 'paragraph',
|
|
123
|
+
html: 'オンラインで素早く、安全に、そして完全に透明にランダム抽選を行う方法をお探しですか?弊社の無料の<strong>名前抽選器</strong>は、数秒でランダムに当選者を選ぶための究極のソリューションです。シンプルで視覚的、かつ効果的に設計されており、デジタルの「公平な抽選」が必要なあらゆるシナリオに最適です。',
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
type: 'paragraph',
|
|
127
|
+
html: 'SNSのコンテスト管理、配信チャンネルでの大規模な抽選、あるいは今日のゴミ出し担当を決める際でも、弊社のランダムセレクターは最新の暗号化アルゴリズムにより完全な公平性を保証します。<strong>操作なし、バイアスなし、純粋なランダム性のみ。</strong>'
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
type: 'title',
|
|
131
|
+
text: '利用シーン',
|
|
132
|
+
level: 3,
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
type: 'comparative',
|
|
136
|
+
columns: 2,
|
|
137
|
+
items: [
|
|
138
|
+
{
|
|
139
|
+
title: 'SNSプレゼントキャンペーン',
|
|
140
|
+
description: 'Instagram、Twitter(X)、Facebookのコンテストに最適です。コメントから名前をコピーして貼り付けるだけで、公平な当選者を選べます。ツールは自動的に重複を削除します。',
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
title: 'Twitch / YouTube 配信',
|
|
144
|
+
description: 'スムーズなアニメーションと統合されたサウンドを備えた「スタジオモード」により、OBSで画面を直接共有し、ライブで当選者を選びながら視聴者にエキサイティングなビジュアルショーを提供できます。',
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
title: 'クラスやチームのアクティビティ',
|
|
148
|
+
description: '教師やチームリーダーは、ランダムなグループ作り、最初の発表者の決定、タスクのランダムな割り当てなどに使用でき、ひいきのない完全な透明性を確保できます。',
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
title: 'シークレットサンタやイベント',
|
|
152
|
+
description: '家族のイベント、オフィスの抽選、シークレットサンタなどを、紙や複雑な段取りなしに名前を即座にランダムに選ぶことで簡素化できます。',
|
|
153
|
+
},
|
|
154
|
+
],
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
type: 'title',
|
|
158
|
+
text: 'このツールの特徴',
|
|
159
|
+
level: 3,
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
type: 'list',
|
|
163
|
+
items: [
|
|
164
|
+
'<strong>真の暗号化:</strong> 脆弱な疑似乱数生成器ではなく、ブラウザのWeb Crypto API(W3C標準)を使用しています。すべての抽選は数学的に公平です。',
|
|
165
|
+
'<strong>保存なし:</strong> データがブラウザから送信されることはありません。リストの販売、プロファイリング、データの保存などは一切行いません。純粋なローカル処理です。',
|
|
166
|
+
'<strong>視覚的なデザイン:</strong> シネマモードとアニメーションにより、すべての抽選が思い出に残るイベントになります。OBSキャプチャやライブ配信に最適です。',
|
|
167
|
+
'<strong>重複処理:</strong> 繰り返された名前やバリエーション(余分なスペース、大文字小文字など)を自動的に検出し、実在する一人が一回だけカウントされるようにします。',
|
|
168
|
+
],
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
type: 'title',
|
|
172
|
+
text: '抽選器の使い方ステップバイステップ',
|
|
173
|
+
level: 3,
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
type: 'list',
|
|
177
|
+
items: [
|
|
178
|
+
'<strong>ステップ1 - 参加者を入力:</strong> メインのテキストボックスに名前のリストを貼り付けます。ツールは改行ごとに異なる参加者として自動的に検出します。重複がありますか?問題ありません。ツールが削除します。',
|
|
179
|
+
'<strong>ステップ2 - カスタマイズ:</strong> 設定タブでは、緊張感を高めるカウントダウン、お祝いのコンフェッティ(紙吹雪)効果、特定の名前を除外する「ブラックリスト」を有効にできます。',
|
|
180
|
+
'<strong>ステップ3 - 抽選!</strong> メインボタンをクリックすると、エンジンが暗号的に安全なランダムな選択を生成します。当選者は明確かつ印象的に表示されます。',
|
|
181
|
+
],
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
type: 'title',
|
|
185
|
+
text: '重み付けエントリー:特定の参加者を有利にする',
|
|
186
|
+
level: 3,
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
type: 'paragraph',
|
|
190
|
+
html: '最も忠実なサブスクライバー(登録者)に報いたり、特定の参加者にチャンスを増やしたりしたいですか?弊社の<strong>重み付けエントリー</strong>システムはユニークで、名前を何度も書くことなく、任意の名前に「重み」や倍率を割り当てることができます。',
|
|
191
|
+
},
|
|
192
|
+
{
|
|
193
|
+
type: 'tip',
|
|
194
|
+
title: '名前に重みを割り当てる方法',
|
|
195
|
+
html: '<p>アスタリスク(*)または「x」の後に参加数を入力します。例:</p><ul><li><strong>"田中 * 5"</strong> - 田中さんは5人分として参加します</li><li><strong>"佐藤 x 10"</strong> - 佐藤さんは当選確率が10倍になります</li><li><strong>"鈴木"</strong> - 記号なし = 通常の1エントリー</li></ul><p>これは、VIPサブスクライバーや特定のユーザーを優遇したい抽選に最適です。</p>',
|
|
196
|
+
},
|
|
197
|
+
{
|
|
198
|
+
type: 'title',
|
|
199
|
+
text: '完全なプライバシーとセキュリティ',
|
|
200
|
+
level: 3,
|
|
201
|
+
},
|
|
202
|
+
{
|
|
203
|
+
type: 'paragraph',
|
|
204
|
+
html: '他のオンラインツールとは異なり、<strong>弊社はお客様のデータを保存しません</strong>。名前の処理や抽選の実行はすべてお客様自身のブラウザ内でローカルに行われます。参加者リストがネットワーク経由で送信されたり、外部サーバーに保存されたりすることはありません。',
|
|
205
|
+
},
|
|
206
|
+
{
|
|
207
|
+
type: 'paragraph',
|
|
208
|
+
html: '<strong>これはどういう意味ですか?</strong> 参加者リストはあなただけのものです。タブを閉じるとデータは消えます。トラッキングクッキー、ユーザープロフィール、中央データベースはありません。あなたと抽選の参加者に最大限のプライバシーを保証します。',
|
|
209
|
+
},
|
|
210
|
+
{
|
|
211
|
+
type: 'title',
|
|
212
|
+
text: '数学的な透明性',
|
|
213
|
+
level: 3,
|
|
214
|
+
},
|
|
215
|
+
{
|
|
216
|
+
type: 'paragraph',
|
|
217
|
+
html: '「結果が操作されているのではないか?」と疑問に思う方がいるかもしれません。答えは簡単です。<strong>操作は不可能です。</strong> 抽選コードは決定的かつ暗号的です。隠された変数や「裏での操作」はありません。',
|
|
218
|
+
},
|
|
219
|
+
{
|
|
220
|
+
type: 'paragraph',
|
|
221
|
+
html: '各当選者は、真の暗号化エントロピーを使用して、入力されたリストにフィッシャー–イェーツのシャッフル アルゴリズムを適用した直接の結果です。プロセスを監査したい場合は、コードがGitHubで公開されています。',
|
|
222
|
+
},
|
|
223
|
+
],
|
|
224
|
+
ui: {
|
|
225
|
+
faqTitle: 'よくある質問',
|
|
226
|
+
bibliographyTitle: '技術リファレンス',
|
|
227
|
+
title: 'ランダム抽選',
|
|
228
|
+
totalParticipants: 'ユニーク参加者数',
|
|
229
|
+
ready: '準備完了',
|
|
230
|
+
participants: '参加者',
|
|
231
|
+
settings: '設定',
|
|
232
|
+
importFile: 'ファイルをインポート',
|
|
233
|
+
clearAll: 'すべてクリア',
|
|
234
|
+
placeholder: 'ここに名前を入力または貼り付けてください...\n田中太郎\n山田花子\n@twitch_user',
|
|
235
|
+
onePerLine: '1行に1参加者',
|
|
236
|
+
lines: '行',
|
|
237
|
+
filters: 'フィルター',
|
|
238
|
+
allowDuplicates: '重複を許可',
|
|
239
|
+
winnerCount: '当選者数',
|
|
240
|
+
autoRemove: '当選者を自動削除',
|
|
241
|
+
blacklist: 'ブラックリスト(除外)',
|
|
242
|
+
blacklistPlaceholder: '禁止する名前(1行に1つ)...',
|
|
243
|
+
blacklistInfo: 'これらのユーザーは抽選に参加しません。',
|
|
244
|
+
sceneEffects: 'シーンエフェクト',
|
|
245
|
+
countdown: 'カウントダウン(3秒)',
|
|
246
|
+
confetti: 'お祝いの紙吹雪',
|
|
247
|
+
zenMode: 'ゼンモード(パネルを隠す)',
|
|
248
|
+
waitingParticipants: '参加者を待機中...',
|
|
249
|
+
winner: '当選者',
|
|
250
|
+
reroll: '再抽選',
|
|
251
|
+
history: 'このセッションの履歴',
|
|
252
|
+
noWinnersYet: 'まだ当選者はいません...',
|
|
253
|
+
startGiveaway: '抽選を開始',
|
|
254
|
+
studioHeader: 'LIVE STUDIO v2.0',
|
|
255
|
+
},
|
|
256
|
+
};
|