@jjlmoya/utils-streaming 1.11.0 → 1.13.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 +4 -2
- package/src/category/i18n/de.ts +1 -1
- package/src/category/i18n/fr.ts +12 -12
- package/src/category/i18n/pl.ts +2 -2
- package/src/category/i18n/ru.ts +7 -7
- package/src/category/i18n/zh.ts +1 -1
- package/src/layouts/PreviewLayout.astro +7 -2
- package/src/pages/[locale]/[slug].astro +24 -15
- package/src/tests/diacritics_density.test.ts +118 -0
- package/src/tests/inverted_punctuation.test.ts +84 -0
- package/src/tests/locale_completeness.test.ts +3 -19
- package/src/tests/no_en_dash.test.ts +70 -0
- package/src/tests/pagespeed_best_practices.test.ts +198 -0
- package/src/tests/script_density.test.ts +94 -0
- package/src/tests/seo_length.test.ts +1 -0
- package/src/tests/shared-test-helpers.ts +56 -0
- package/src/tests/title_quality.test.ts +1 -1
- package/src/tests/tool_exports.test.ts +34 -0
- package/src/tool/sorteo/bibliography.astro +2 -10
- package/src/tool/sorteo/bibliography.ts +12 -0
- package/src/tool/sorteo/i18n/de.ts +12 -24
- package/src/tool/sorteo/i18n/en.ts +2 -14
- package/src/tool/sorteo/i18n/es.ts +2 -14
- package/src/tool/sorteo/i18n/fr.ts +4 -16
- package/src/tool/sorteo/i18n/id.ts +2 -14
- package/src/tool/sorteo/i18n/it.ts +2 -14
- package/src/tool/sorteo/i18n/ja.ts +3 -15
- package/src/tool/sorteo/i18n/ko.ts +2 -14
- package/src/tool/sorteo/i18n/nl.ts +2 -14
- package/src/tool/sorteo/i18n/pl.ts +9 -21
- package/src/tool/sorteo/i18n/pt.ts +2 -14
- package/src/tool/sorteo/i18n/ru.ts +16 -28
- package/src/tool/sorteo/i18n/sv.ts +2 -14
- package/src/tool/sorteo/i18n/tr.ts +2 -14
- package/src/tool/sorteo/i18n/zh.ts +9 -21
- package/src/tool/sorteo/index.ts +3 -0
- package/src/tool/sorteo/seo.astro +2 -1
- package/src/tool/sorteo/ui-manager.ts +1 -1
- package/src/tool/sorteo/ui.ts +0 -2
- package/src/tool/tebasCheck/bibliography.astro +2 -10
- package/src/tool/tebasCheck/bibliography.ts +12 -0
- package/src/tool/tebasCheck/i18n/de.ts +13 -25
- package/src/tool/tebasCheck/i18n/en.ts +2 -14
- package/src/tool/tebasCheck/i18n/es.ts +3 -15
- package/src/tool/tebasCheck/i18n/fr.ts +10 -22
- package/src/tool/tebasCheck/i18n/id.ts +2 -14
- package/src/tool/tebasCheck/i18n/it.ts +2 -14
- package/src/tool/tebasCheck/i18n/ja.ts +2 -14
- package/src/tool/tebasCheck/i18n/ko.ts +2 -14
- package/src/tool/tebasCheck/i18n/nl.ts +2 -14
- package/src/tool/tebasCheck/i18n/pl.ts +2 -14
- package/src/tool/tebasCheck/i18n/pt.ts +2 -14
- package/src/tool/tebasCheck/i18n/ru.ts +6 -18
- package/src/tool/tebasCheck/i18n/sv.ts +2 -14
- package/src/tool/tebasCheck/i18n/tr.ts +2 -14
- package/src/tool/tebasCheck/i18n/zh.ts +12 -24
- package/src/tool/tebasCheck/index.ts +3 -0
- package/src/tool/tebasCheck/seo.astro +2 -1
- package/src/tool/tebasCheck/types.ts +0 -2
- package/src/tool/tebasCheck/ui-manager.ts +1 -1
- package/src/types.ts +2 -3
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { bibliography } from '../bibliography';
|
|
1
2
|
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
3
|
import type { ToolLocaleContent } from '../../../types';
|
|
3
4
|
import type { SorteoUI } from '../ui';
|
|
@@ -97,19 +98,8 @@ export const content: ToolLocaleContent<SorteoUI> = {
|
|
|
97
98
|
slug,
|
|
98
99
|
title,
|
|
99
100
|
description,
|
|
100
|
-
faqTitle: 'Pertanyaan yang Sering Diajukan',
|
|
101
101
|
faq: faqData,
|
|
102
|
-
|
|
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: 'Algoritma Fisher-Yates Shuffle',
|
|
110
|
-
url: 'https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle',
|
|
111
|
-
},
|
|
112
|
-
],
|
|
102
|
+
bibliography,
|
|
113
103
|
howTo: howToData,
|
|
114
104
|
schemas: [faqSchema as any, howToSchema as any, appSchema as any],
|
|
115
105
|
seo: [
|
|
@@ -222,8 +212,6 @@ export const content: ToolLocaleContent<SorteoUI> = {
|
|
|
222
212
|
},
|
|
223
213
|
],
|
|
224
214
|
ui: {
|
|
225
|
-
faqTitle: 'Pertanyaan yang Sering Diajukan',
|
|
226
|
-
bibliographyTitle: 'Referensi Teknis',
|
|
227
215
|
title: 'Giveaway Acak',
|
|
228
216
|
totalParticipants: 'Total Peserta Unik',
|
|
229
217
|
ready: 'SIAP',
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { bibliography } from '../bibliography';
|
|
1
2
|
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
3
|
import type { ToolLocaleContent } from '../../../types';
|
|
3
4
|
import type { SorteoUI } from '../ui';
|
|
@@ -97,19 +98,8 @@ export const content: ToolLocaleContent<SorteoUI> = {
|
|
|
97
98
|
slug,
|
|
98
99
|
title,
|
|
99
100
|
description,
|
|
100
|
-
faqTitle: 'Domande Frequenti',
|
|
101
101
|
faq: faqData,
|
|
102
|
-
|
|
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
|
-
],
|
|
102
|
+
bibliography,
|
|
113
103
|
howTo: howToData,
|
|
114
104
|
schemas: [faqSchema as any, howToSchema as any, appSchema as any],
|
|
115
105
|
seo: [
|
|
@@ -222,8 +212,6 @@ export const content: ToolLocaleContent<SorteoUI> = {
|
|
|
222
212
|
},
|
|
223
213
|
],
|
|
224
214
|
ui: {
|
|
225
|
-
faqTitle: 'Domande Frequenti',
|
|
226
|
-
bibliographyTitle: 'Riferimenti Tecnici',
|
|
227
215
|
title: 'Giveaway Casuale',
|
|
228
216
|
totalParticipants: 'Partecipanti Unici Totali',
|
|
229
217
|
ready: 'PRONTO',
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { bibliography } from '../bibliography';
|
|
1
2
|
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
3
|
import type { ToolLocaleContent } from '../../../types';
|
|
3
4
|
import type { SorteoUI } from '../ui';
|
|
@@ -97,19 +98,8 @@ export const content: ToolLocaleContent<SorteoUI> = {
|
|
|
97
98
|
slug,
|
|
98
99
|
title,
|
|
99
100
|
description,
|
|
100
|
-
faqTitle: 'よくある質問',
|
|
101
101
|
faq: faqData,
|
|
102
|
-
|
|
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
|
-
],
|
|
102
|
+
bibliography,
|
|
113
103
|
howTo: howToData,
|
|
114
104
|
schemas: [faqSchema as any, howToSchema as any, appSchema as any],
|
|
115
105
|
seo: [
|
|
@@ -218,12 +208,10 @@ export const content: ToolLocaleContent<SorteoUI> = {
|
|
|
218
208
|
},
|
|
219
209
|
{
|
|
220
210
|
type: 'paragraph',
|
|
221
|
-
html: '
|
|
211
|
+
html: '各当選者は、真の暗号化エントロピーを使用して、入力されたリストにフィッシャー-イェーツのシャッフル アルゴリズムを適用した直接の結果です。プロセスを監査したい場合は、コードがGitHubで公開されています。',
|
|
222
212
|
},
|
|
223
213
|
],
|
|
224
214
|
ui: {
|
|
225
|
-
faqTitle: 'よくある質問',
|
|
226
|
-
bibliographyTitle: '技術リファレンス',
|
|
227
215
|
title: 'ランダム抽選',
|
|
228
216
|
totalParticipants: 'ユニーク参加者数',
|
|
229
217
|
ready: '準備完了',
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { bibliography } from '../bibliography';
|
|
1
2
|
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
3
|
import type { ToolLocaleContent } from '../../../types';
|
|
3
4
|
import type { SorteoUI } from '../ui';
|
|
@@ -97,19 +98,8 @@ export const content: ToolLocaleContent<SorteoUI> = {
|
|
|
97
98
|
slug,
|
|
98
99
|
title,
|
|
99
100
|
description,
|
|
100
|
-
faqTitle: '자주 묻는 질문',
|
|
101
101
|
faq: faqData,
|
|
102
|
-
|
|
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: 'Fisher-Yates Shuffle 알고리즘',
|
|
110
|
-
url: 'https://ko.wikipedia.org/wiki/%ED%94%BC%EC%85%94-%EC%9G%B4%EC%B8%A0_%EC%85%94%ED%94%8C',
|
|
111
|
-
},
|
|
112
|
-
],
|
|
102
|
+
bibliography,
|
|
113
103
|
howTo: howToData,
|
|
114
104
|
schemas: [faqSchema as any, howToSchema as any, appSchema as any],
|
|
115
105
|
seo: [
|
|
@@ -222,8 +212,6 @@ export const content: ToolLocaleContent<SorteoUI> = {
|
|
|
222
212
|
},
|
|
223
213
|
],
|
|
224
214
|
ui: {
|
|
225
|
-
faqTitle: '자주 묻는 질문',
|
|
226
|
-
bibliographyTitle: '기술 문서',
|
|
227
215
|
title: '랜덤 추첨',
|
|
228
216
|
totalParticipants: '전체 고유 참가자',
|
|
229
217
|
ready: '준비 완료',
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { bibliography } from '../bibliography';
|
|
1
2
|
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
3
|
import type { ToolLocaleContent } from '../../../types';
|
|
3
4
|
import type { SorteoUI } from '../ui';
|
|
@@ -97,19 +98,8 @@ export const content: ToolLocaleContent<SorteoUI> = {
|
|
|
97
98
|
slug,
|
|
98
99
|
title,
|
|
99
100
|
description,
|
|
100
|
-
faqTitle: 'Veelgestelde vragen',
|
|
101
101
|
faq: faqData,
|
|
102
|
-
|
|
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: 'Fisher-Yates Shuffle Algoritme',
|
|
110
|
-
url: 'https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle',
|
|
111
|
-
},
|
|
112
|
-
],
|
|
102
|
+
bibliography,
|
|
113
103
|
howTo: howToData,
|
|
114
104
|
schemas: [faqSchema as any, howToSchema as any, appSchema as any],
|
|
115
105
|
seo: [
|
|
@@ -222,8 +212,6 @@ export const content: ToolLocaleContent<SorteoUI> = {
|
|
|
222
212
|
},
|
|
223
213
|
],
|
|
224
214
|
ui: {
|
|
225
|
-
faqTitle: 'Veelgestelde vragen',
|
|
226
|
-
bibliographyTitle: 'Technische Referenties',
|
|
227
215
|
title: 'Willekeurige Giveaway',
|
|
228
216
|
totalParticipants: 'Totaal Unieke Deelnemers',
|
|
229
217
|
ready: 'GEREED',
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { bibliography } from '../bibliography';
|
|
1
2
|
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
3
|
import type { ToolLocaleContent } from '../../../types';
|
|
3
4
|
import type { SorteoUI } from '../ui';
|
|
@@ -21,7 +22,7 @@ const faqData = [
|
|
|
21
22
|
{
|
|
22
23
|
question: 'Jak zapobiec dwukrotnemu udziałowi tej samej osoby?',
|
|
23
24
|
answer:
|
|
24
|
-
'Narzędzie posiada funkcję automatycznego
|
|
25
|
+
'Narzędzie posiada funkcję automatycznego \"czyszczenia duplikatów\", która wykrywa identyczne imiona lub takie z niewielkimi różnicami w spacji, aby zapewnić, że każda prawdziwa osoba liczy się tylko raz.',
|
|
25
26
|
},
|
|
26
27
|
{
|
|
27
28
|
question: 'Czy mogę wylosować kilku zwycięzców naraz?',
|
|
@@ -50,7 +51,7 @@ const howToData = [
|
|
|
50
51
|
text: 'Wybierz, ilu zwycięzców potrzebujesz i czy chcesz odfiltrować duplikaty lub puste wpisy.',
|
|
51
52
|
},
|
|
52
53
|
{
|
|
53
|
-
name: 'Uruchom
|
|
54
|
+
name: 'Uruchom \"niewinną rękę\"',
|
|
54
55
|
text: 'Kliknij przycisk losowania. Wizualna animacja podtrzyma napięcie przed ujawnieniem zwycięzcy.',
|
|
55
56
|
},
|
|
56
57
|
{
|
|
@@ -97,19 +98,8 @@ export const content: ToolLocaleContent<SorteoUI> = {
|
|
|
97
98
|
slug,
|
|
98
99
|
title,
|
|
99
100
|
description,
|
|
100
|
-
faqTitle: 'Często Zadawane Pytania',
|
|
101
101
|
faq: faqData,
|
|
102
|
-
|
|
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: 'Algorytm przetasowania Fishera-Yatesa',
|
|
110
|
-
url: 'https://pl.wikipedia.org/wiki/Algorytm_Fishera-Yatesa',
|
|
111
|
-
},
|
|
112
|
-
],
|
|
102
|
+
bibliography,
|
|
113
103
|
howTo: howToData,
|
|
114
104
|
schemas: [faqSchema as any, howToSchema as any, appSchema as any],
|
|
115
105
|
seo: [
|
|
@@ -120,7 +110,7 @@ export const content: ToolLocaleContent<SorteoUI> = {
|
|
|
120
110
|
},
|
|
121
111
|
{
|
|
122
112
|
type: 'paragraph',
|
|
123
|
-
html: 'Zastanawiasz się, jak przeprowadzić losowanie online szybko, bezpiecznie i całkowicie przejrzyście? Nasze darmowe narzędzie <strong>Losowanie Imion</strong> to ostateczne rozwiązanie, pozwalające wybrać zwycięzcę w kilka sekund. Zaprojektowane, by być proste, wizualne i skuteczne, jest idealne do każdego scenariusza, w którym potrzebujesz cyfrowej
|
|
113
|
+
html: 'Zastanawiasz się, jak przeprowadzić losowanie online szybko, bezpiecznie i całkowicie przejrzyście? Nasze darmowe narzędzie <strong>Losowanie Imion</strong> to ostateczne rozwiązanie, pozwalające wybrać zwycięzcę w kilka sekund. Zaprojektowane, by być proste, wizualne i skuteczne, jest idealne do każdego scenariusza, w którym potrzebujesz cyfrowej \"niewinnej ręki\".',
|
|
124
114
|
},
|
|
125
115
|
{
|
|
126
116
|
type: 'paragraph',
|
|
@@ -176,7 +166,7 @@ export const content: ToolLocaleContent<SorteoUI> = {
|
|
|
176
166
|
type: 'list',
|
|
177
167
|
items: [
|
|
178
168
|
'<strong>Krok 1 - Wprowadź uczestników:</strong> Wklej listę imion do głównego pola tekstowego. Narzędzie automatycznie wykrywa każdą nową linię jako oddzielnego uczestnika. Masz duplikaty? Nie ma problemu, narzędzie je usunie.',
|
|
179
|
-
'<strong>Krok 2 - Dostosuj:</strong> W zakładce ustawień możesz włączyć odliczanie, aby zbudować napięcie, efekt konfetti do świętowania, lub aktywować
|
|
169
|
+
'<strong>Krok 2 - Dostosuj:</strong> W zakładce ustawień możesz włączyć odliczanie, aby zbudować napięcie, efekt konfetti do świętowania, lub aktywować \" czarną listę\", aby wykluczyć pewne imiona.',
|
|
180
170
|
'<strong>Krok 3 - Losuj!</strong> Kliknij główny przycisk, a nasz silnik wygeneruje kryptograficznie bezpieczny wybór. Zwycięzcy zostaną wyświetleni w sposób czytelny i efektowny.',
|
|
181
171
|
],
|
|
182
172
|
},
|
|
@@ -187,12 +177,12 @@ export const content: ToolLocaleContent<SorteoUI> = {
|
|
|
187
177
|
},
|
|
188
178
|
{
|
|
189
179
|
type: 'paragraph',
|
|
190
|
-
html: 'Chcesz nagrodzić swoich najwierniejszych subskrybentów lub dać więcej szans niektórym uczestnikom? Nasz system <strong>Wpisów Ważonych</strong> jest unikalny i pozwala przypisać
|
|
180
|
+
html: 'Chcesz nagrodzić swoich najwierniejszych subskrybentów lub dać więcej szans niektórym uczestnikom? Nasz system <strong>Wpisów Ważonych</strong> jest unikalny i pozwala przypisać \"wagę\" lub mnożnik do dowolnego imienia bez konieczności wielokrotnego wpisywania go.',
|
|
191
181
|
},
|
|
192
182
|
{
|
|
193
183
|
type: 'tip',
|
|
194
184
|
title: 'Jak przypisać wagi do imion',
|
|
195
|
-
html: '<p>Użyj gwiazdki (*) lub
|
|
185
|
+
html: '<p>Użyj gwiazdki (*) lub \"x\", a następnie wpisz liczbę udziałów. Przykłady:</p><ul><li><strong>"Jan * 5"</strong> - Jan bierze udział tak, jakby był 5 osobami</li><li><strong>"Maria x 10"</strong> - Maria ma 10 razy większe szanse</li><li><strong>"Piotr"</strong> - Brak symbolu = 1 zwykły wpis</li></ul><p>Jest to idealne dla losowań, w których chcesz dać przewagę subskrybentom VIP lub specjalnym użytkownikom.</p>',
|
|
196
186
|
},
|
|
197
187
|
{
|
|
198
188
|
type: 'title',
|
|
@@ -214,7 +204,7 @@ export const content: ToolLocaleContent<SorteoUI> = {
|
|
|
214
204
|
},
|
|
215
205
|
{
|
|
216
206
|
type: 'paragraph',
|
|
217
|
-
html: 'Niektórzy mogą pytać:
|
|
207
|
+
html: 'Niektórzy mogą pytać: \"A co jeśli zmanipulujecie wyniki?\". Odpowiedź jest prosta: <strong>nie możemy</strong>. Kod losowania jest deterministyczny i kryptograficzny. Brak ukrytych zmiennych, żadnych \"palców na wadze\".',
|
|
218
208
|
},
|
|
219
209
|
{
|
|
220
210
|
type: 'paragraph',
|
|
@@ -222,8 +212,6 @@ export const content: ToolLocaleContent<SorteoUI> = {
|
|
|
222
212
|
},
|
|
223
213
|
],
|
|
224
214
|
ui: {
|
|
225
|
-
faqTitle: 'Często Zadawane Pytania',
|
|
226
|
-
bibliographyTitle: 'Referencje Techniczne',
|
|
227
215
|
title: 'Losowanie',
|
|
228
216
|
totalParticipants: 'Suma Unikalnych Uczestników',
|
|
229
217
|
ready: 'GOTOWE',
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { bibliography } from '../bibliography';
|
|
1
2
|
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
3
|
import type { ToolLocaleContent } from '../../../types';
|
|
3
4
|
import type { SorteoUI } from '../ui';
|
|
@@ -97,19 +98,8 @@ export const content: ToolLocaleContent<SorteoUI> = {
|
|
|
97
98
|
slug,
|
|
98
99
|
title,
|
|
99
100
|
description,
|
|
100
|
-
faqTitle: 'Perguntas Frequentes',
|
|
101
101
|
faq: faqData,
|
|
102
|
-
|
|
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://pt.wikipedia.org/wiki/Algoritmo_de_Fisher-Yates',
|
|
111
|
-
},
|
|
112
|
-
],
|
|
102
|
+
bibliography,
|
|
113
103
|
howTo: howToData,
|
|
114
104
|
schemas: [faqSchema as any, howToSchema as any, appSchema as any],
|
|
115
105
|
seo: [
|
|
@@ -222,8 +212,6 @@ export const content: ToolLocaleContent<SorteoUI> = {
|
|
|
222
212
|
},
|
|
223
213
|
],
|
|
224
214
|
ui: {
|
|
225
|
-
faqTitle: 'Perguntas Frequentes',
|
|
226
|
-
bibliographyTitle: 'Referências Técnicas',
|
|
227
215
|
title: 'Sorteio Aleatório',
|
|
228
216
|
totalParticipants: 'Total de Participantes Únicos',
|
|
229
217
|
ready: 'PRONTO',
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { bibliography } from '../bibliography';
|
|
1
2
|
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
3
|
import type { ToolLocaleContent } from '../../../types';
|
|
3
4
|
import type { SorteoUI } from '../ui';
|
|
@@ -21,7 +22,7 @@ const faqData = [
|
|
|
21
22
|
{
|
|
22
23
|
question: 'Как предотвратить повторное участие одного и того же человека?',
|
|
23
24
|
answer:
|
|
24
|
-
'В инструменте есть функция автоматической
|
|
25
|
+
'В инструменте есть функция автоматической \"очистки дубликатов\", которая распознает идентичные имена или имена с небольшими различиями в пробелах, гарантируя, что каждый реальный человек будет учтен только один раз.',
|
|
25
26
|
},
|
|
26
27
|
{
|
|
27
28
|
question: 'Можно ли выбрать несколько победителей одновременно?',
|
|
@@ -36,7 +37,7 @@ const faqData = [
|
|
|
36
37
|
{
|
|
37
38
|
question: 'Сохраняются ли мои данные или список участников?',
|
|
38
39
|
answer:
|
|
39
|
-
'Нет, никогда. Ваша конфиденциальность
|
|
40
|
+
'Нет, никогда. Ваша конфиденциальность - наш приоритет. Весь процесс розыгрыша происходит локально в вашем браузере. Введенные имена никогда не отправляются на наши серверы и не хранятся в базах данных.',
|
|
40
41
|
},
|
|
41
42
|
];
|
|
42
43
|
|
|
@@ -50,7 +51,7 @@ const howToData = [
|
|
|
50
51
|
text: 'Выберите количество победителей и нужно ли фильтровать дубликаты или пустые строки.',
|
|
51
52
|
},
|
|
52
53
|
{
|
|
53
|
-
name: 'Запустите
|
|
54
|
+
name: 'Запустите \"честный выбор\"',
|
|
54
55
|
text: 'Нажмите кнопку розыгрыша. Визуальная анимация поддержит напряжение перед объявлением победителя.',
|
|
55
56
|
},
|
|
56
57
|
{
|
|
@@ -97,19 +98,8 @@ export const content: ToolLocaleContent<SorteoUI> = {
|
|
|
97
98
|
slug,
|
|
98
99
|
title,
|
|
99
100
|
description,
|
|
100
|
-
faqTitle: 'Часто задаваемые вопросы',
|
|
101
101
|
faq: faqData,
|
|
102
|
-
|
|
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://ru.wikipedia.org/wiki/%D0%A2%D0%B0%D1%81%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D0%B8%D1%88%D0%B5%D1%80%D0%B0_%E2%80%94_%D0%99%D0%B5%D1%82%D1%81%D0%B0',
|
|
111
|
-
},
|
|
112
|
-
],
|
|
102
|
+
bibliography,
|
|
113
103
|
howTo: howToData,
|
|
114
104
|
schemas: [faqSchema as any, howToSchema as any, appSchema as any],
|
|
115
105
|
seo: [
|
|
@@ -120,11 +110,11 @@ export const content: ToolLocaleContent<SorteoUI> = {
|
|
|
120
110
|
},
|
|
121
111
|
{
|
|
122
112
|
type: 'paragraph',
|
|
123
|
-
html: 'Хотите провести онлайн розыгрыш быстро, безопасно и абсолютно прозрачно? Наш бесплатный <strong>Рандомайзер имен</strong>
|
|
113
|
+
html: 'Хотите провести онлайн розыгрыш быстро, безопасно и абсолютно прозрачно? Наш бесплатный <strong>Рандомайзер имен</strong> - это идеальное решение, чтобы выбрать победителя за несколько секунд. Простой, наглядный и эффективный, он идеально подходит для любых ситуаций, когда нужен цифровой вариант \"честного жребия\".',
|
|
124
114
|
},
|
|
125
115
|
{
|
|
126
116
|
type: 'paragraph',
|
|
127
|
-
html: 'Будь то конкурс в соцсетях, масштабный розыгрыш на стриме или просто решение о том, кто сегодня выносит мусор, наш случайный выбор гарантирует полную беспристрастность благодаря современным криптографическим алгоритмам. <strong>Никаких манипуляций, никакой предвзятости
|
|
117
|
+
html: 'Будь то конкурс в соцсетях, масштабный розыгрыш на стриме или просто решение о том, кто сегодня выносит мусор, наш случайный выбор гарантирует полную беспристрастность благодаря современным криптографическим алгоритмам. <strong>Никаких манипуляций, никакой предвзятости - только чистая случайность.</strong>'
|
|
128
118
|
},
|
|
129
119
|
{
|
|
130
120
|
type: 'title',
|
|
@@ -141,7 +131,7 @@ export const content: ToolLocaleContent<SorteoUI> = {
|
|
|
141
131
|
},
|
|
142
132
|
{
|
|
143
133
|
title: 'Стримы на Twitch / YouTube',
|
|
144
|
-
description: 'Благодаря нашему
|
|
134
|
+
description: 'Благодаря нашему \"Студийному режиму\" с плавной анимацией и встроенными звуками вы можете транслировать экран прямо в OBS, создавая яркое шоу для зрителей во время выбора победителей в прямом эфире.',
|
|
145
135
|
},
|
|
146
136
|
{
|
|
147
137
|
title: 'Учеба и работа в команде',
|
|
@@ -149,7 +139,7 @@ export const content: ToolLocaleContent<SorteoUI> = {
|
|
|
149
139
|
},
|
|
150
140
|
{
|
|
151
141
|
title: 'Тайный Санта и праздники',
|
|
152
|
-
description: 'Упростите организацию семейных встреч, офисных лотерей или
|
|
142
|
+
description: 'Упростите организацию семейных встреч, офисных лотерей или \"Тайного Санты\", мгновенно выбирая имена без бумажек и сложной логистики.',
|
|
153
143
|
},
|
|
154
144
|
],
|
|
155
145
|
},
|
|
@@ -175,9 +165,9 @@ export const content: ToolLocaleContent<SorteoUI> = {
|
|
|
175
165
|
{
|
|
176
166
|
type: 'list',
|
|
177
167
|
items: [
|
|
178
|
-
'<strong>Шаг 1
|
|
179
|
-
'<strong>Шаг 2
|
|
180
|
-
'<strong>Шаг 3
|
|
168
|
+
'<strong>Шаг 1 - Ввод участников:</strong> Вставьте список имен в основное текстовое поле. Инструмент распознает каждую новую строку как отдельного участника. Есть дубликаты? Не проблема, система их удалит.',
|
|
169
|
+
'<strong>Шаг 2 - Настройка:</strong> Во вкладке настроек можно включить обратный отсчет для интриги, эффект конфетти для празднования или \"черный список\" для исключения определенных имен.',
|
|
170
|
+
'<strong>Шаг 3 - Розыгрыш!</strong> Нажмите основную кнопку, и наш движок сгенерирует криптографически безопасный выбор. Победители будут показаны четко и эффектно.',
|
|
181
171
|
],
|
|
182
172
|
},
|
|
183
173
|
{
|
|
@@ -187,12 +177,12 @@ export const content: ToolLocaleContent<SorteoUI> = {
|
|
|
187
177
|
},
|
|
188
178
|
{
|
|
189
179
|
type: 'paragraph',
|
|
190
|
-
html: 'Хотите поощрить самых преданных подписчиков или дать больше шансов определенным участникам? Наша система <strong>взвешенных записей</strong> уникальна
|
|
180
|
+
html: 'Хотите поощрить самых преданных подписчиков или дать больше шансов определенным участникам? Наша система <strong>взвешенных записей</strong> уникальна - она позволяет назначить \"вес\" или множитель любому имени, не переписывая его несколько раз.',
|
|
191
181
|
},
|
|
192
182
|
{
|
|
193
183
|
type: 'tip',
|
|
194
184
|
title: 'Как назначить веса именам',
|
|
195
|
-
html: '<p>Используйте звездочку (*) или
|
|
185
|
+
html: '<p>Используйте звездочку (*) или \"x\", а затем число участий. Примеры:</p><ul><li><strong>"Иван * 5"</strong> - Иван участвует за пятерых</li><li><strong>"Мария x 10"</strong> - У Марии в 10 раз больше шансов</li><li><strong>"Петр"</strong> - Без символов = 1 обычное участие</li></ul><p>Это идеально для розыгрышей, где вы хотите дать преимущество VIP-подписчикам или особым пользователям.</p>',
|
|
196
186
|
},
|
|
197
187
|
{
|
|
198
188
|
type: 'title',
|
|
@@ -214,16 +204,14 @@ export const content: ToolLocaleContent<SorteoUI> = {
|
|
|
214
204
|
},
|
|
215
205
|
{
|
|
216
206
|
type: 'paragraph',
|
|
217
|
-
html: 'Кто-то может спросить:
|
|
207
|
+
html: 'Кто-то может спросить: \"А если результаты подтасованы?\". Ответ прост: <strong>это невозможно</strong>. Код розыгрыша детерминирован и криптографичен. Никаких скрытых переменных или вмешательства за кадром.',
|
|
218
208
|
},
|
|
219
209
|
{
|
|
220
210
|
type: 'paragraph',
|
|
221
|
-
html: 'Каждый победитель
|
|
211
|
+
html: 'Каждый победитель - это прямой результат алгоритма тасования Фишера - Йетса, примененного к вашему точному списку с использованием реальной криптографической энтропии. Если вы хотите проверить процесс, код открыт и доступен на GitHub.',
|
|
222
212
|
},
|
|
223
213
|
],
|
|
224
214
|
ui: {
|
|
225
|
-
faqTitle: 'Часто задаваемые вопросы',
|
|
226
|
-
bibliographyTitle: 'Технические справки',
|
|
227
215
|
title: 'Случайный розыгрыш',
|
|
228
216
|
totalParticipants: 'Всего уникальных участников',
|
|
229
217
|
ready: 'ГОТОВО',
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { bibliography } from '../bibliography';
|
|
1
2
|
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
3
|
import type { ToolLocaleContent } from '../../../types';
|
|
3
4
|
import type { SorteoUI } from '../ui';
|
|
@@ -97,19 +98,8 @@ export const content: ToolLocaleContent<SorteoUI> = {
|
|
|
97
98
|
slug,
|
|
98
99
|
title,
|
|
99
100
|
description,
|
|
100
|
-
faqTitle: 'Vanliga frågor',
|
|
101
101
|
faq: faqData,
|
|
102
|
-
|
|
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: 'Fisher-Yates Shuffle Algorithm',
|
|
110
|
-
url: 'https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle',
|
|
111
|
-
},
|
|
112
|
-
],
|
|
102
|
+
bibliography,
|
|
113
103
|
howTo: howToData,
|
|
114
104
|
schemas: [faqSchema as any, howToSchema as any, appSchema as any],
|
|
115
105
|
seo: [
|
|
@@ -222,8 +212,6 @@ export const content: ToolLocaleContent<SorteoUI> = {
|
|
|
222
212
|
},
|
|
223
213
|
],
|
|
224
214
|
ui: {
|
|
225
|
-
faqTitle: 'Vanliga frågor',
|
|
226
|
-
bibliographyTitle: 'Tekniska referenser',
|
|
227
215
|
title: 'Slumpartad utlottning',
|
|
228
216
|
totalParticipants: 'Totalt antal unika deltagare',
|
|
229
217
|
ready: 'REDO',
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { bibliography } from '../bibliography';
|
|
1
2
|
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
3
|
import type { ToolLocaleContent } from '../../../types';
|
|
3
4
|
import type { SorteoUI } from '../ui';
|
|
@@ -97,19 +98,8 @@ export const content: ToolLocaleContent<SorteoUI> = {
|
|
|
97
98
|
slug,
|
|
98
99
|
title,
|
|
99
100
|
description,
|
|
100
|
-
faqTitle: 'Sıkça Sorulan Sorular',
|
|
101
101
|
faq: faqData,
|
|
102
|
-
|
|
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: 'Fisher-Yates Karıştırma Algoritması',
|
|
110
|
-
url: 'https://tr.wikipedia.org/wiki/Fisher-Yates_kar%C4%B1%C5%9Ft%C4%B1rma_algoritmas%C4%B1',
|
|
111
|
-
},
|
|
112
|
-
],
|
|
102
|
+
bibliography,
|
|
113
103
|
howTo: howToData,
|
|
114
104
|
schemas: [faqSchema as any, howToSchema as any, appSchema as any],
|
|
115
105
|
seo: [
|
|
@@ -222,8 +212,6 @@ export const content: ToolLocaleContent<SorteoUI> = {
|
|
|
222
212
|
},
|
|
223
213
|
],
|
|
224
214
|
ui: {
|
|
225
|
-
faqTitle: 'Sıkça Sorulan Sorular',
|
|
226
|
-
bibliographyTitle: 'Teknik Referanslar',
|
|
227
215
|
title: 'Rastgele Çekiliş',
|
|
228
216
|
totalParticipants: 'Toplam Benzersiz Katılımcı',
|
|
229
217
|
ready: 'HAZIR',
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { bibliography } from '../bibliography';
|
|
1
2
|
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
3
|
import type { ToolLocaleContent } from '../../../types';
|
|
3
4
|
import type { SorteoUI } from '../ui';
|
|
@@ -21,7 +22,7 @@ const faqData = [
|
|
|
21
22
|
{
|
|
22
23
|
question: '如何防止有人重复参与?',
|
|
23
24
|
answer:
|
|
24
|
-
'
|
|
25
|
+
'该工具具有自动\"去重\"功能,可以检测完全相同的名字或带有微小空格差异的名字,以确保每个真实的人只被计算一次。',
|
|
25
26
|
},
|
|
26
27
|
{
|
|
27
28
|
question: '我可以一次抽取多名获胜者吗?',
|
|
@@ -50,7 +51,7 @@ const howToData = [
|
|
|
50
51
|
text: '选择您需要的获胜者人数,以及是否要过滤重复项或空白名字。',
|
|
51
52
|
},
|
|
52
53
|
{
|
|
53
|
-
name: '
|
|
54
|
+
name: '启动\"公平之手\"',
|
|
54
55
|
text: '点击抽奖按钮。在揭晓获胜者之前,视觉动画将保持现场的紧张氛围。',
|
|
55
56
|
},
|
|
56
57
|
{
|
|
@@ -97,19 +98,8 @@ export const content: ToolLocaleContent<SorteoUI> = {
|
|
|
97
98
|
slug,
|
|
98
99
|
title,
|
|
99
100
|
description,
|
|
100
|
-
faqTitle: '常见问题',
|
|
101
101
|
faq: faqData,
|
|
102
|
-
|
|
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: 'Fisher-Yates 洗牌算法',
|
|
110
|
-
url: 'https://zh.wikipedia.org/wiki/Fisher-Yates%E6%B4%97%E7%89%8C%E7%AE%97%E6%B3%95',
|
|
111
|
-
},
|
|
112
|
-
],
|
|
102
|
+
bibliography,
|
|
113
103
|
howTo: howToData,
|
|
114
104
|
schemas: [faqSchema as any, howToSchema as any, appSchema as any],
|
|
115
105
|
seo: [
|
|
@@ -120,7 +110,7 @@ export const content: ToolLocaleContent<SorteoUI> = {
|
|
|
120
110
|
},
|
|
121
111
|
{
|
|
122
112
|
type: 'paragraph',
|
|
123
|
-
html: '想知道如何快速、安全且完全透明地进行在线随机抽奖吗?我们的免费<strong>名字抽取器</strong
|
|
113
|
+
html: '想知道如何快速、安全且完全透明地进行在线随机抽奖吗?我们的免费<strong>名字抽取器</strong>工具是在几秒钟内随机选择获胜者的终极解决方案。它设计简单、直观且高效,非常适合任何需要数字\"公平抽签\"的应用场景。',
|
|
124
114
|
},
|
|
125
115
|
{
|
|
126
116
|
type: 'paragraph',
|
|
@@ -141,7 +131,7 @@ export const content: ToolLocaleContent<SorteoUI> = {
|
|
|
141
131
|
},
|
|
142
132
|
{
|
|
143
133
|
title: 'Twitch / YouTube 直播',
|
|
144
|
-
description: '
|
|
134
|
+
description: '借助我们拥有流畅动画和集成音效的\"直播间模式\",您可以直接在 OBS 中共享屏幕,在直播抽取获胜者的同时为观众呈现精彩的视觉效果。',
|
|
145
135
|
},
|
|
146
136
|
{
|
|
147
137
|
title: '课堂与团队互动',
|
|
@@ -176,7 +166,7 @@ export const content: ToolLocaleContent<SorteoUI> = {
|
|
|
176
166
|
type: 'list',
|
|
177
167
|
items: [
|
|
178
168
|
'<strong>第一步 - 输入参与者:</strong> 将名字列表粘贴到主文本框中。工具会自动将每个换行符识别为一个不同的参与者。有重复?没问题,工具会自动去除。',
|
|
179
|
-
'<strong>第二步 - 自定义:</strong>
|
|
169
|
+
'<strong>第二步 - 自定义:</strong> 在设置标签中,您可以开启倒计时以营造紧张感,开启五彩纸屑效果进行庆祝,或者开启\"黑名单\"以排除某些名字。',
|
|
180
170
|
'<strong>第三步 - 抽取!</strong> 点击主按钮,我们的引擎将生成加密安全的随机选择。获胜者将以清晰且令人难忘的方式展示。',
|
|
181
171
|
],
|
|
182
172
|
},
|
|
@@ -187,7 +177,7 @@ export const content: ToolLocaleContent<SorteoUI> = {
|
|
|
187
177
|
},
|
|
188
178
|
{
|
|
189
179
|
type: 'paragraph',
|
|
190
|
-
html: '想奖励您最忠实的订阅者或给某些参与者更多机会吗?我们的<strong>权重条目</strong
|
|
180
|
+
html: '想奖励您最忠实的订阅者或给某些参与者更多机会吗?我们的<strong>权重条目</strong>系统独一无二,允许您为任何名字分配\"权重\"或倍数,而无需多次书写。',
|
|
191
181
|
},
|
|
192
182
|
{
|
|
193
183
|
type: 'tip',
|
|
@@ -214,7 +204,7 @@ export const content: ToolLocaleContent<SorteoUI> = {
|
|
|
214
204
|
},
|
|
215
205
|
{
|
|
216
206
|
type: 'paragraph',
|
|
217
|
-
html: '
|
|
207
|
+
html: '有人可能会问:\"如果你操控结果怎么办?\"答案很简单:<strong>我们做不到</strong>。抽奖代码是确定性且加密的。没有隐藏变量,没有\"幕后黑手\"。',
|
|
218
208
|
},
|
|
219
209
|
{
|
|
220
210
|
type: 'paragraph',
|
|
@@ -222,8 +212,6 @@ export const content: ToolLocaleContent<SorteoUI> = {
|
|
|
222
212
|
},
|
|
223
213
|
],
|
|
224
214
|
ui: {
|
|
225
|
-
faqTitle: '常见问题',
|
|
226
|
-
bibliographyTitle: '技术参考',
|
|
227
215
|
title: '随机抽奖',
|
|
228
216
|
totalParticipants: '唯一参与者总数',
|
|
229
217
|
ready: '就绪',
|
package/src/tool/sorteo/index.ts
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import { sorteo } from './entry';
|
|
2
|
+
import type { ToolDefinition } from '../../types';
|
|
3
|
+
import giveawayCss from './giveaway.css?raw';
|
|
2
4
|
export * from './entry';
|
|
3
5
|
export const SORTEO_TOOL: ToolDefinition = {
|
|
4
6
|
entry: sorteo,
|
|
5
7
|
Component: () => import('./component.astro'),
|
|
6
8
|
SEOComponent: () => import('./seo.astro'),
|
|
7
9
|
BibliographyComponent: () => import('./bibliography.astro'),
|
|
10
|
+
css: giveawayCss,
|
|
8
11
|
};
|
|
@@ -9,6 +9,7 @@ interface Props {
|
|
|
9
9
|
|
|
10
10
|
const { locale = 'es' } = Astro.props;
|
|
11
11
|
const content = await SORTEO_TOOL.entry.i18n[locale]?.();
|
|
12
|
+
if (!content) return null;
|
|
12
13
|
---
|
|
13
14
|
|
|
14
|
-
{content && <SEORenderer content={{ locale, sections: content.seo }} />}
|
|
15
|
+
{content.seo?.length > 0 && <SEORenderer content={{ locale, sections: content.seo }} />}
|