@jjlmoya/utils-tabletop 1.9.0 → 1.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/entries.ts +4 -0
- package/src/tests/locale_completeness.test.ts +1 -1
- package/src/tests/tool_validation.test.ts +1 -1
- package/src/tool/decision-wheel/client.ts +5 -1
- package/src/tool/decision-wheel/components/SegmentEditor.astro +1 -1
- package/src/tool/decision-wheel/decision-wheel.css +23 -7
- package/src/tool/hidden-role-dealer/bibliography.astro +16 -0
- package/src/tool/hidden-role-dealer/bibliography.ts +12 -0
- package/src/tool/hidden-role-dealer/client.ts +265 -0
- package/src/tool/hidden-role-dealer/component.astro +184 -0
- package/src/tool/hidden-role-dealer/entry.ts +145 -0
- package/src/tool/hidden-role-dealer/hidden-role-dealer.css +604 -0
- package/src/tool/hidden-role-dealer/i18n/de.ts +195 -0
- package/src/tool/hidden-role-dealer/i18n/en.ts +279 -0
- package/src/tool/hidden-role-dealer/i18n/es.ts +279 -0
- package/src/tool/hidden-role-dealer/i18n/fr.ts +215 -0
- package/src/tool/hidden-role-dealer/i18n/id.ts +191 -0
- package/src/tool/hidden-role-dealer/i18n/it.ts +191 -0
- package/src/tool/hidden-role-dealer/i18n/ja.ts +191 -0
- package/src/tool/hidden-role-dealer/i18n/ko.ts +191 -0
- package/src/tool/hidden-role-dealer/i18n/nl.ts +191 -0
- package/src/tool/hidden-role-dealer/i18n/pl.ts +191 -0
- package/src/tool/hidden-role-dealer/i18n/pt.ts +191 -0
- package/src/tool/hidden-role-dealer/i18n/ru.ts +191 -0
- package/src/tool/hidden-role-dealer/i18n/sv.ts +191 -0
- package/src/tool/hidden-role-dealer/i18n/tr.ts +191 -0
- package/src/tool/hidden-role-dealer/i18n/zh.ts +191 -0
- package/src/tool/hidden-role-dealer/index.ts +10 -0
- package/src/tool/hidden-role-dealer/logic.test.ts +99 -0
- package/src/tool/hidden-role-dealer/logic.ts +134 -0
- package/src/tool/hidden-role-dealer/modules/custom-role-manager.ts +35 -0
- package/src/tool/hidden-role-dealer/modules/dealer-logic.ts +73 -0
- package/src/tool/hidden-role-dealer/modules/hold-controller.ts +38 -0
- package/src/tool/hidden-role-dealer/modules/particle-effects.ts +40 -0
- package/src/tool/hidden-role-dealer/modules/player-manager.ts +44 -0
- package/src/tool/hidden-role-dealer/modules/presets.ts +46 -0
- package/src/tool/hidden-role-dealer/modules/setup-handlers.ts +34 -0
- package/src/tool/hidden-role-dealer/modules/storage.ts +23 -0
- package/src/tool/hidden-role-dealer/modules/utils.ts +18 -0
- package/src/tool/hidden-role-dealer/modules/wizard-html.ts +161 -0
- package/src/tool/hidden-role-dealer/modules/wizard-renderer.ts +161 -0
- package/src/tool/hidden-role-dealer/modules/writer-handler.ts +70 -0
- package/src/tool/hidden-role-dealer/seo.astro +16 -0
- package/src/tool/hidden-role-dealer/types.ts +31 -0
- package/src/tools.ts +2 -0
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import { bibliography } from '../bibliography';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { HiddenRoleDealerUI } from '../entry';
|
|
4
|
+
|
|
5
|
+
const ui: HiddenRoleDealerUI = {
|
|
6
|
+
title: '비밀 역할 분배기',
|
|
7
|
+
setupTitle: '역할 분배 설정',
|
|
8
|
+
playerList: '플레이어 목록',
|
|
9
|
+
addPlayer: '추가',
|
|
10
|
+
addPlayerPlaceholder: '플레이어 이름 입력...',
|
|
11
|
+
rolePool: '비밀 역할 풀',
|
|
12
|
+
presetsTitle: '게임 템플릿',
|
|
13
|
+
presetCustom: '사용자 지정 설정',
|
|
14
|
+
dealRoles: '비밀 역할 나누기',
|
|
15
|
+
clearPlayers: '모두 지우기',
|
|
16
|
+
instructions: '플레이어 이름을 입력하고 비밀 역할을 설정한 뒤, 비밀 역할 나누기 버튼을 누르세요.',
|
|
17
|
+
passTo: '기기를 다음 사람에게 전달하세요:',
|
|
18
|
+
holdToReveal: '눌러서 확인',
|
|
19
|
+
releasingResets: '역할을 확인하려면 계속 누르세요...',
|
|
20
|
+
hideRole: '확인 완료, 역할 숨기기',
|
|
21
|
+
nextPlayer: '다음 플레이어',
|
|
22
|
+
finishedTitle: '역할 분배 완료',
|
|
23
|
+
finishedDesc: '모든 플레이어가 비밀리에 역할을 확인했습니다. 게임을 시작할 수 있습니다.',
|
|
24
|
+
restart: '다시 시작 및 재분배',
|
|
25
|
+
rolesCount: '선택된 역할 수',
|
|
26
|
+
playersCount: '추가된 플레이어 수',
|
|
27
|
+
mismatchWarning: '역할을 분배하려면 최소 3명의 플레이어가 필요합니다.',
|
|
28
|
+
werewolfName: '웨어울프 / 마피아',
|
|
29
|
+
werewolfDesc: '시민들은 숨어 있는 웨어울프를 찾아내어 투표로 처형해야 합니다.',
|
|
30
|
+
avalonName: '레지스탕스: 아발론',
|
|
31
|
+
avalonDesc: '멀린과 충신들은 방해꾼을 피하며 퀘스트를 완수해야 합니다.',
|
|
32
|
+
hitlerName: '시크릿 히틀러',
|
|
33
|
+
hitlerDesc: '자유주의자들은 법안을 통과시키고 비밀 지도자를 찾아야 합니다.',
|
|
34
|
+
customName: '사용자 지정 설정',
|
|
35
|
+
customDesc: '플레이어들에게 텍스트가 표시된 간단한 카드를 분배합니다.',
|
|
36
|
+
roleWerewolfName: '웨어울프',
|
|
37
|
+
roleWerewolfDesc: '밤마다 시민을 비밀리에 제거합니다.',
|
|
38
|
+
roleWerewolfSecret: '다른 웨어울프들과 협력하여 마을 사람들을 속이세요.',
|
|
39
|
+
roleSeerName: '예언자',
|
|
40
|
+
roleSeerDesc: '매일 밤 플레이어 한 명의 진영을 확인합니다.',
|
|
41
|
+
roleSeerSecret: '웨어울프를 찾아내되, 살아남기 위해 정체를 숨기세요.',
|
|
42
|
+
roleDoctorName: '의사',
|
|
43
|
+
roleDoctorDesc: '매일 밤 플레이어 한 명을 공격으로부터 보호합니다.',
|
|
44
|
+
roleDoctorSecret: '마을의 중요한 구성원들을 지켜내세요.',
|
|
45
|
+
roleVillagerName: '시민',
|
|
46
|
+
roleVillagerDesc: '숨어 있는 웨어울프를 찾아냅니다.',
|
|
47
|
+
roleVillagerSecret: '토론하고, 분석하여 의심스러운 플레이어에게 투표하세요.',
|
|
48
|
+
roleMerlinName: '멀린',
|
|
49
|
+
roleMerlinDesc: '악의 세력 정체를 알고 있습니다.',
|
|
50
|
+
roleMerlinSecret: '자신의 정체를 들키지 않으면서 아군을 승리로 이끄세요.',
|
|
51
|
+
roleAssassinName: '암살자',
|
|
52
|
+
roleAssassinDesc: '게임 마지막에 멀린을 암살할 수 있습니다.',
|
|
53
|
+
roleAssassinSecret: '마지막 순간에 멀린을 지목하여 승리를 가로채세요.',
|
|
54
|
+
roleMinionName: '모드레드의 하수인',
|
|
55
|
+
roleMinionDesc: '악의 세력의 일원입니다.',
|
|
56
|
+
roleMinionSecret: '들키지 않고 퀘스트를 방해하세요.',
|
|
57
|
+
roleServantName: '아서왕의 충신',
|
|
58
|
+
roleServantDesc: '아서를 위해 퀘스트를 성공시킵니다.',
|
|
59
|
+
roleServantSecret: '토론하고, 팀을 제안하고, 논리적으로 투표하세요.',
|
|
60
|
+
roleHitlerName: '히틀러',
|
|
61
|
+
roleHitlerDesc: '파시스트들의 비밀 지도자입니다.',
|
|
62
|
+
roleHitlerSecret: '수상으로 선출되거나 파시스트 법안을 통과시키세요.',
|
|
63
|
+
roleFascistName: '파시스트',
|
|
64
|
+
roleFascistDesc: '파시스트 법안을 통과시키기 위해 협력합니다.',
|
|
65
|
+
roleFascistSecret: '히틀러를 보호하고 선거 결과를 조작하세요.',
|
|
66
|
+
roleLiberalName: '자유주의자',
|
|
67
|
+
roleLiberalDesc: '파시스트의 위협을 저지합니다.',
|
|
68
|
+
roleLiberalSecret: '자유주의 법안을 통과시키거나 히틀러를 처형하세요.',
|
|
69
|
+
roleCustomName: '사용자 지정 역할',
|
|
70
|
+
roleCustomDesc: '사용자 지정 역할 설명.',
|
|
71
|
+
roleCustomSecret: '팀의 목표를 달성하세요.',
|
|
72
|
+
teamWerewolves: '웨어울프 팀',
|
|
73
|
+
teamVillagers: '시민 팀',
|
|
74
|
+
teamGood: '선',
|
|
75
|
+
teamEvil: '악',
|
|
76
|
+
teamFascist: '파시스트',
|
|
77
|
+
teamLiberal: '자유주의자',
|
|
78
|
+
teamCustom: '사용자 지정 팀',
|
|
79
|
+
secretRoleIs: '당신의 비밀 역할은:',
|
|
80
|
+
customRolesTitle: '사용자 지정 역할 설정',
|
|
81
|
+
customRolePlaceholder: '역할 이름 입력...',
|
|
82
|
+
neutralLabel: '중립',
|
|
83
|
+
goodLabel: '선',
|
|
84
|
+
evilLabel: '악',
|
|
85
|
+
customMismatchWarning: '플레이어 수와 동일한 수의 사용자 지정 역할을 설정하세요.',
|
|
86
|
+
impostorPresetName: '임포스터 게임',
|
|
87
|
+
impostorPresetDesc: '임포스터와 크루원 역할을 커스텀 수량으로 분배합니다.',
|
|
88
|
+
impostorTitle: '임포스터 설정',
|
|
89
|
+
impostorWarning: '플레이어 수가 임포스터 수보다 많아야 합니다.',
|
|
90
|
+
roleImpostorName: '임포스터',
|
|
91
|
+
roleImpostorDesc: '크루원을 비밀리에 제거합니다.',
|
|
92
|
+
roleImpostorSecret: '들키지 않게 방해 공작을 펼치고 크루원을 제거하세요.',
|
|
93
|
+
roleCrewmateName: '크루원',
|
|
94
|
+
roleCrewmateDesc: '임무를 수행하고 임포스터를 찾아냅니다.',
|
|
95
|
+
roleCrewmateSecret: '비밀 단어는:',
|
|
96
|
+
teamImpostor: '임포스터',
|
|
97
|
+
teamCrewmate: '크루원',
|
|
98
|
+
impostorSharedSecretLabel: '공유할 비밀 단어',
|
|
99
|
+
impostorSharedSecretPlaceholder: '예: 장소: 레스토랑, 단어: 사과',
|
|
100
|
+
impostorModeLabel: '임포스터 수 결정 방식',
|
|
101
|
+
impostorModeFixed: '고정 수량',
|
|
102
|
+
impostorModePercentage: 'نسبة 백분율 (%)',
|
|
103
|
+
impostorModeRange: '무작위 범위',
|
|
104
|
+
impostorFixedLabel: '임포스터 수',
|
|
105
|
+
impostorPercentageLabel: '임포스터 비율 (%)',
|
|
106
|
+
impostorRangeMinLabel: '최소 임포스터',
|
|
107
|
+
impostorRangeMaxLabel: '최대 임포스터',
|
|
108
|
+
impostorWriterLabel: '출제자 / 호스트',
|
|
109
|
+
impostorWriterRandom: '비플레이어 호스트',
|
|
110
|
+
roleWriterName: '출제자',
|
|
111
|
+
roleWriterDesc: '당신이 비밀 단어를 결정합니다.',
|
|
112
|
+
writerInputPrompt: '당신은 출제자입니다. 이번 판의 비밀 단어나 장소를 입력해 주세요:',
|
|
113
|
+
writerInputPlaceholder: '예: 레스토랑, 병원...',
|
|
114
|
+
btnSetWord: '단어 저장 및 시작',
|
|
115
|
+
impostorWriterPreround: '비밀 프리라운드 (모든 플레이어)',
|
|
116
|
+
impostorWriterDescHost: '비플레이어 호스트는 무작위 단어를 사용합니다.',
|
|
117
|
+
impostorWriterDescPreround: '프리라운드는 모든 플레이어가 비밀리에 단어를 작성하고 그중 하나를 무작위로 선택합니다.',
|
|
118
|
+
impostorWriterDescPlayer: '지정된 플레이어가 단어를 작성하며, 해당 플레이어는 임포스터가 되지 않습니다.',
|
|
119
|
+
preroundPassTitle: '프리라운드: 기기를 전달하세요:',
|
|
120
|
+
preroundInputPrompt: '비밀 단어 또는 장소를 입력하세요 (화면에 가려짐):',
|
|
121
|
+
preroundPassHint: '다른 플레이어들이 단어를 보지 못하게 주의하세요!',
|
|
122
|
+
btnSubmitWord: '단어 제출',
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
const faq = [
|
|
126
|
+
{
|
|
127
|
+
question: '비밀 역할 분배기는 어떻게 작동하나요?',
|
|
128
|
+
answer: '비밀 역할 분배기는 정체 은닉 게임을 즐길 때 한 대의 기기로 역할을 비밀리에 나눌 수 있게 해주는 도구입니다. 플레이어 이름을 입력하고 템플릿을 선택하거나 역할을 커스텀한 뒤, 기기를 차례로 넘겨가며 확인 버튼을 길게 눌러 역할을 확인합니다.',
|
|
129
|
+
},
|
|
130
|
+
];
|
|
131
|
+
|
|
132
|
+
const howTo = [
|
|
133
|
+
{
|
|
134
|
+
name: '플레이어 추가',
|
|
135
|
+
text: '설정 창에 참가자 이름을 입력합니다.',
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
name: '템플릿 선택',
|
|
139
|
+
text: '내장된 게임 템플릿 중 하나를 고르거나 커스텀 역할 목록을 만듭니다.',
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
name: '전달 및 확인',
|
|
143
|
+
text: '기기를 각 플레이어에게 전달합니다. 각 플레이어는 확인 버튼을 길게 눌러 자신의 비밀 역할을 확인한 후 다음을 탭해야 합니다.',
|
|
144
|
+
},
|
|
145
|
+
];
|
|
146
|
+
|
|
147
|
+
export const content: ToolLocaleContent<HiddenRoleDealerUI> = {
|
|
148
|
+
slug: 'hidden-role-dealer',
|
|
149
|
+
title: '비밀 역할 분배기: 정체 은닉 게임 및 마피아 직업 배분',
|
|
150
|
+
description: '웨어울프, 아발론, 시크릿 히틀러, 어몽어스 임포스터 등 다양한 마피아 게임의 비밀 역할을 카드 없이 스마트폰 하나로 분배하세요.',
|
|
151
|
+
ui,
|
|
152
|
+
seo: [
|
|
153
|
+
{ type: 'title', text: '정체 은닉 게임에서의 진영 밸런스 조정 방법', level: 2 },
|
|
154
|
+
{ type: 'paragraph', html: '마피아 게임의 재미는 인원수에 따른 시민 진영과 마피아 진영의 완벽한 성비 조율에서 결정됩니다. 본 툴은 최적의 밸런스를 자동으로 계산해 줍니다.' },
|
|
155
|
+
],
|
|
156
|
+
faq,
|
|
157
|
+
bibliography,
|
|
158
|
+
howTo,
|
|
159
|
+
schemas: [
|
|
160
|
+
{
|
|
161
|
+
'@context': 'https://schema.org',
|
|
162
|
+
'@type': 'FAQPage',
|
|
163
|
+
'mainEntity': faq.map((f) => ({
|
|
164
|
+
'@type': 'Question',
|
|
165
|
+
'name': f.question,
|
|
166
|
+
'acceptedAnswer': {
|
|
167
|
+
'@type': 'Answer',
|
|
168
|
+
'text': f.answer,
|
|
169
|
+
},
|
|
170
|
+
})),
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
'@context': 'https://schema.org',
|
|
174
|
+
'@type': 'SoftwareApplication',
|
|
175
|
+
'name': ui.title,
|
|
176
|
+
'operatingSystem': 'All',
|
|
177
|
+
'applicationCategory': 'UtilitiesApplication',
|
|
178
|
+
'browserRequirements': 'Requires HTML5. Requires JavaScript.',
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
'@context': 'https://schema.org',
|
|
182
|
+
'@type': 'HowTo',
|
|
183
|
+
'name': ui.setupTitle,
|
|
184
|
+
'step': howTo.map((h) => ({
|
|
185
|
+
'@type': 'HowToStep',
|
|
186
|
+
'name': h.name,
|
|
187
|
+
'text': h.text,
|
|
188
|
+
})),
|
|
189
|
+
},
|
|
190
|
+
],
|
|
191
|
+
};
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import { bibliography } from '../bibliography';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { HiddenRoleDealerUI } from '../entry';
|
|
4
|
+
|
|
5
|
+
const ui: HiddenRoleDealerUI = {
|
|
6
|
+
title: 'Geheime Rollenverdeler',
|
|
7
|
+
setupTitle: 'Configuratie Rollenverdeling',
|
|
8
|
+
playerList: 'Spelerslijst',
|
|
9
|
+
addPlayer: 'Toevoegen',
|
|
10
|
+
addPlayerPlaceholder: 'Naam speler...',
|
|
11
|
+
rolePool: 'Geheime Rollenpool',
|
|
12
|
+
presetsTitle: 'Spelpresets',
|
|
13
|
+
presetCustom: 'Aangepaste Setup',
|
|
14
|
+
dealRoles: 'Geheime Rollen Verdelen',
|
|
15
|
+
clearPlayers: 'Alles Wissen',
|
|
16
|
+
instructions: 'Voer de namen van de spelers in, configureer de geheime rollen en tik op Geheime Rollen Verdelen.',
|
|
17
|
+
passTo: 'Geef het apparaat aan',
|
|
18
|
+
holdToReveal: 'Ingedrukt houden om te onthullen',
|
|
19
|
+
releasingResets: 'Blijf ingedrukt houden om te onthullen...',
|
|
20
|
+
hideRole: 'Begrepen, rol verbergen',
|
|
21
|
+
nextPlayer: 'Volgende Speler',
|
|
22
|
+
finishedTitle: 'Alle Rollen Verdeeld',
|
|
23
|
+
finishedDesc: 'Alle spelers hebben hun rol in het geheim bekeken. U kunt het spel nu starten.',
|
|
24
|
+
restart: 'Herstarten en Opnieuw Verdelen',
|
|
25
|
+
rolesCount: 'Geselecteerde Rollen',
|
|
26
|
+
playersCount: 'Toegevoegde Spelers',
|
|
27
|
+
mismatchWarning: 'Er zijn minimaal 3 spelers nodig om rollen te verdelen.',
|
|
28
|
+
werewolfName: 'Weerwolven / Maffia',
|
|
29
|
+
werewolfDesc: 'Burgers proberen de verborgen Weerwolven te vinden en weg te stemmen.',
|
|
30
|
+
avalonName: 'The Resistance: Avalon',
|
|
31
|
+
avalonDesc: 'Merlijn en de loyale dienaren voltooien missies terwijl ze saboteurs vermijden.',
|
|
32
|
+
hitlerName: 'Secret Hitler',
|
|
33
|
+
hitlerDesc: 'Liberalen proberen wetten aan te nemen en de geheime leider te vinden.',
|
|
34
|
+
customName: 'Aangepaste Setup',
|
|
35
|
+
customDesc: 'Verdeel eenvoudige gelabelde kaarten onder spelers.',
|
|
36
|
+
roleWerewolfName: 'Weerwolf',
|
|
37
|
+
roleWerewolfDesc: 'Elimineer \'s nachts in het geheim Burgers.',
|
|
38
|
+
roleWerewolfSecret: 'Werk samen met andere Weerwolven om het dorp te misleiden.',
|
|
39
|
+
roleSeerName: 'Ziener',
|
|
40
|
+
roleSeerDesc: 'Bekijk elke nacht de loyaliteit van een speler.',
|
|
41
|
+
roleSeerSecret: 'Identificeer Weerwolven maar blijf verborgen om te overleven.',
|
|
42
|
+
roleDoctorName: 'Dokter',
|
|
43
|
+
roleDoctorDesc: 'Bescherm elke nacht een speler tegen eliminatie.',
|
|
44
|
+
roleDoctorSecret: 'Houd belangrijke dorpsbewoners in leven.',
|
|
45
|
+
roleVillagerName: 'Burger',
|
|
46
|
+
roleVillagerDesc: 'Vind de verborgen Weerwolven.',
|
|
47
|
+
roleVillagerSecret: 'Discussieer, analyseer en stem op verdachte spelers.',
|
|
48
|
+
roleMerlinName: 'Merlijn',
|
|
49
|
+
roleMerlinDesc: 'Kent de agenten van het kwaad.',
|
|
50
|
+
roleMerlinSecret: 'Leid het team naar de overwinning zonder jezelf te onthullen.',
|
|
51
|
+
roleAssassinName: 'Moordenaar',
|
|
52
|
+
roleAssassinDesc: 'Kan Merlijn vermoorden aan het einde van het spel.',
|
|
53
|
+
roleAssassinSecret: 'Vind Merlijn om de overwinning op het einde te stelen.',
|
|
54
|
+
roleMinionName: 'Dienaar van Mordred',
|
|
55
|
+
roleMinionDesc: 'Geïnformeerde agent van Mordred.',
|
|
56
|
+
roleMinionSecret: 'Saboteer missies zonder ontdekt te worden.',
|
|
57
|
+
roleServantName: 'Loyale Dienaar',
|
|
58
|
+
roleServantDesc: 'Voltooi missies voor Arthur.',
|
|
59
|
+
roleServantSecret: 'Discussieer, stel teams voor en stem logisch.',
|
|
60
|
+
roleHitlerName: 'Hitler',
|
|
61
|
+
roleHitlerDesc: 'De geheime leider van de Fascisten.',
|
|
62
|
+
roleHitlerSecret: 'Word verkozen tot Kanselier of laat Fascisten wetten aannemen.',
|
|
63
|
+
roleFascistName: 'Fascist',
|
|
64
|
+
roleFascistDesc: 'Coördineer om fascistische wetten aan te nemen.',
|
|
65
|
+
roleFascistSecret: 'Bescherm Hitler en manipuleer verkiezingsresultaten.',
|
|
66
|
+
roleLiberalName: 'Liberaal',
|
|
67
|
+
roleLiberalDesc: 'Vind en stop de fascistische dreiging.',
|
|
68
|
+
roleLiberalSecret: 'Neem liberale wetten aan en elimineer Hitler indien mogelijk.',
|
|
69
|
+
roleCustomName: 'Aangepaste Rol',
|
|
70
|
+
roleCustomDesc: 'Algemene beschrijving van de aangepaste rol.',
|
|
71
|
+
roleCustomSecret: 'Vervul je teamdoel.',
|
|
72
|
+
teamWerewolves: 'Weerwolven',
|
|
73
|
+
teamVillagers: 'Burgers',
|
|
74
|
+
teamGood: 'Goed',
|
|
75
|
+
teamEvil: 'Kwaad',
|
|
76
|
+
teamFascist: 'Fascist',
|
|
77
|
+
teamLiberal: 'Liberaal',
|
|
78
|
+
teamCustom: 'Aangepast Team',
|
|
79
|
+
secretRoleIs: 'je geheime rol is:',
|
|
80
|
+
customRolesTitle: 'Configuratie Aangepaste Rollen',
|
|
81
|
+
customRolePlaceholder: 'Voer rolnaam in...',
|
|
82
|
+
neutralLabel: 'Neutraal',
|
|
83
|
+
goodLabel: 'Goed',
|
|
84
|
+
evilLabel: 'Kwaad',
|
|
85
|
+
customMismatchWarning: 'Configureer exact evenveel aangepaste rollen als spelers.',
|
|
86
|
+
impostorPresetName: 'Impostor-spel',
|
|
87
|
+
impostorPresetDesc: 'Wijs Impostors en Crewmates toe met aanpasbare aantallen.',
|
|
88
|
+
impostorTitle: 'Impostor-instellingen',
|
|
89
|
+
impostorWarning: 'Je hebt meer spelers nodig dan impostors.',
|
|
90
|
+
roleImpostorName: 'Impostor',
|
|
91
|
+
roleImpostorDesc: 'Elimineer Crewmates in het geheim.',
|
|
92
|
+
roleImpostorSecret: 'Saboteer en elimineer zonder gepakt te worden.',
|
|
93
|
+
roleCrewmateName: 'Crewmate',
|
|
94
|
+
roleCrewmateDesc: 'Voltooi taken en vind de Impostor.',
|
|
95
|
+
roleCrewmateSecret: 'Het geheime woord is:',
|
|
96
|
+
teamImpostor: 'Impostor',
|
|
97
|
+
teamCrewmate: 'Crewmate',
|
|
98
|
+
impostorSharedSecretLabel: 'Gedeeld Geheim Woord',
|
|
99
|
+
impostorSharedSecretPlaceholder: 'bijv. Locatie: Restaurant, of Woord: Appel',
|
|
100
|
+
impostorModeLabel: 'Impostor-berekeningsmodus',
|
|
101
|
+
impostorModeFixed: 'Vast Aantal',
|
|
102
|
+
impostorModePercentage: 'Percentage',
|
|
103
|
+
impostorModeRange: 'Willekeurig Bereik',
|
|
104
|
+
impostorFixedLabel: 'Aantal Impostors',
|
|
105
|
+
impostorPercentageLabel: 'Impostor-percentage (%)',
|
|
106
|
+
impostorRangeMinLabel: 'Minimaal Impostors',
|
|
107
|
+
impostorRangeMaxLabel: 'Maximaal Impostors',
|
|
108
|
+
impostorWriterLabel: 'Woordschrijver / Host',
|
|
109
|
+
impostorWriterRandom: 'Niet-speler host',
|
|
110
|
+
roleWriterName: 'Schrijver',
|
|
111
|
+
roleWriterDesc: 'Jij bepaalt het geheime woord.',
|
|
112
|
+
writerInputPrompt: 'Jij bent de Schrijver. Voer het geheime woord of de locatie voor dit spel in:',
|
|
113
|
+
writerInputPlaceholder: 'bijv. Restaurant, Ziekenhuis...',
|
|
114
|
+
btnSetWord: 'Woord Opslaan & Start',
|
|
115
|
+
impostorWriterPreround: 'Geheime Voorronde (Alle spelers)',
|
|
116
|
+
impostorWriterDescHost: 'De niet-speler host gebruikt een willekeurig woord.',
|
|
117
|
+
impostorWriterDescPreround: 'De voorronde laat alle spelers in het geheim woorden invoeren, waarna er willekeurig één wordt gekozen.',
|
|
118
|
+
impostorWriterDescPlayer: 'De geselecteerde speler schrijft het woord en kan geen impostor zijn.',
|
|
119
|
+
preroundPassTitle: 'Voorronde: Geef het apparaat aan',
|
|
120
|
+
preroundInputPrompt: 'Schrijf in het geheim een woord of locatie:',
|
|
121
|
+
preroundPassHint: 'Houd het woord geheim voor andere spelers!',
|
|
122
|
+
btnSubmitWord: 'Woord Verzenden',
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
const faq = [
|
|
126
|
+
{
|
|
127
|
+
question: 'Hoe werkt de Geheime Rollenverdeler?',
|
|
128
|
+
answer: 'Het tool maakt het mogelijk om geheime rollen voor social deduction spellen lokaal op één apparaat te verdelen. U voert de spelersnamen in, kiest een preset of past de rollen aan, en geeft het apparaat vervolgens door. Elke speler houdt de reveal-knop ingedrukt om zijn rol privé te bekijken.',
|
|
129
|
+
},
|
|
130
|
+
];
|
|
131
|
+
|
|
132
|
+
const howTo = [
|
|
133
|
+
{
|
|
134
|
+
name: 'Spelers toevoegen',
|
|
135
|
+
text: 'Voer de namen van de deelnemers in het configuratiescherm in.',
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
name: 'Preset kiezen',
|
|
139
|
+
text: 'Kies een ingebouwde spelregelpreset of maak een eigen rolverdeling.',
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
name: 'Doorgeven en Onthullen',
|
|
143
|
+
text: 'Geef het apparaat door aan elke speler. Elke speler moet de onthulknop ingedrukt houden om hun geheime rol te bekijken en vervolgens op volgende tikken.',
|
|
144
|
+
},
|
|
145
|
+
];
|
|
146
|
+
|
|
147
|
+
export const content: ToolLocaleContent<HiddenRoleDealerUI> = {
|
|
148
|
+
slug: 'geheime-rollenverdeler-roles',
|
|
149
|
+
title: 'Geheime Rollenverdeler: Spelidentiteiten & Kaartverdeler',
|
|
150
|
+
description: 'Verdeel geheime rollen lokaal voor social deduction spellen zoals Weerwolven, Avalon, Secret Hitler en Impostor zonder fysieke kaarten.',
|
|
151
|
+
ui,
|
|
152
|
+
seo: [
|
|
153
|
+
{ type: 'title', text: 'Teambalance in Social Deduction Spellen', level: 2 },
|
|
154
|
+
{ type: 'paragraph', html: 'Het correct uitbalanceren van de verhouding tussen goede en slechte rollen is essentieel voor een eerlijke en spannende spelervaring.' },
|
|
155
|
+
],
|
|
156
|
+
faq,
|
|
157
|
+
bibliography,
|
|
158
|
+
howTo,
|
|
159
|
+
schemas: [
|
|
160
|
+
{
|
|
161
|
+
'@context': 'https://schema.org',
|
|
162
|
+
'@type': 'FAQPage',
|
|
163
|
+
'mainEntity': faq.map((f) => ({
|
|
164
|
+
'@type': 'Question',
|
|
165
|
+
'name': f.question,
|
|
166
|
+
'acceptedAnswer': {
|
|
167
|
+
'@type': 'Answer',
|
|
168
|
+
'text': f.answer,
|
|
169
|
+
},
|
|
170
|
+
})),
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
'@context': 'https://schema.org',
|
|
174
|
+
'@type': 'SoftwareApplication',
|
|
175
|
+
'name': ui.title,
|
|
176
|
+
'operatingSystem': 'All',
|
|
177
|
+
'applicationCategory': 'UtilitiesApplication',
|
|
178
|
+
'browserRequirements': 'Requires HTML5. Requires JavaScript.',
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
'@context': 'https://schema.org',
|
|
182
|
+
'@type': 'HowTo',
|
|
183
|
+
'name': ui.setupTitle,
|
|
184
|
+
'step': howTo.map((h) => ({
|
|
185
|
+
'@type': 'HowToStep',
|
|
186
|
+
'name': h.name,
|
|
187
|
+
'text': h.text,
|
|
188
|
+
})),
|
|
189
|
+
},
|
|
190
|
+
],
|
|
191
|
+
};
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import { bibliography } from '../bibliography';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { HiddenRoleDealerUI } from '../entry';
|
|
4
|
+
|
|
5
|
+
const ui: HiddenRoleDealerUI = {
|
|
6
|
+
title: 'Rozdający Ukryte Role',
|
|
7
|
+
setupTitle: 'Konfiguracja Rozdawania Ról',
|
|
8
|
+
playerList: 'Lista Graczy',
|
|
9
|
+
addPlayer: 'Dodaj',
|
|
10
|
+
addPlayerPlaceholder: 'Nazwa gracza...',
|
|
11
|
+
rolePool: 'Pula Tajnych Ról',
|
|
12
|
+
presetsTitle: 'Szablony Gier',
|
|
13
|
+
presetCustom: 'Własna Konfiguracja',
|
|
14
|
+
dealRoles: 'Rozdaj Tajne Role',
|
|
15
|
+
clearPlayers: 'Wyczyść Wszystko',
|
|
16
|
+
instructions: 'Wpisz nazwy graczy, skonfiguruj tajne role i naciśnij Rozdaj Tajne Role.',
|
|
17
|
+
passTo: 'Przekaż urządzenie do',
|
|
18
|
+
holdToReveal: 'Przytrzymaj, aby ujawnić',
|
|
19
|
+
releasingResets: 'Trzymaj dalej, aby ujawnić...',
|
|
20
|
+
hideRole: 'Rozumiem, ukryj rolę',
|
|
21
|
+
nextPlayer: 'Następny Gracz',
|
|
22
|
+
finishedTitle: 'Wszystkie Role Rozdane',
|
|
23
|
+
finishedDesc: 'Wszyscy gracze potajemnie sprawdzili swoje role. Można teraz rozpocząć grę.',
|
|
24
|
+
restart: 'Restartuj i Rozdaj Ponownie',
|
|
25
|
+
rolesCount: 'Wybrane Role',
|
|
26
|
+
playersCount: 'Dodani Gracze',
|
|
27
|
+
mismatchWarning: 'Do rozdania ról wymagane jest minimum 3 graczy.',
|
|
28
|
+
werewolfName: 'Wilkołak / Mafia',
|
|
29
|
+
werewolfDesc: 'Wieśniacy próbują odnaleźć i wygłosować ukryte Wilkołaki.',
|
|
30
|
+
avalonName: 'The Resistance: Avalon',
|
|
31
|
+
avalonDesc: 'Merlin i lojalni słudzy wykonują misje, unikając sabotażystów.',
|
|
32
|
+
hitlerName: 'Secret Hitler',
|
|
33
|
+
hitlerDesc: 'Liberałowie próbują uchwalać ustawy i odnaleźć tajnego przywódcę.',
|
|
34
|
+
customName: 'Własna Konfiguracja',
|
|
35
|
+
customDesc: 'Rozdaj graczom proste, podpisane karty.',
|
|
36
|
+
roleWerewolfName: 'Wilkołak',
|
|
37
|
+
roleWerewolfDesc: 'Potajemnie eliminuj Wieśniaków w nocy.',
|
|
38
|
+
roleWerewolfSecret: 'Współpracuj z innymi Wilkołakami, aby oszukać wioskę.',
|
|
39
|
+
roleSeerName: 'Jasnowidz',
|
|
40
|
+
roleSeerDesc: 'Sprawdzaj przynależność jednego gracza każdej nocy.',
|
|
41
|
+
roleSeerSecret: 'Zidentyfikuj Wilkołaki, lecz ukrywaj swoją tożsamość, by przeżyć.',
|
|
42
|
+
roleDoctorName: 'Lekarz',
|
|
43
|
+
roleDoctorDesc: 'Chroń jednego gracza przed eliminacją każdej nocy.',
|
|
44
|
+
roleDoctorSecret: 'Utrzymuj przy życiu kluczowych członków wioski.',
|
|
45
|
+
roleVillagerName: 'Wieśniak',
|
|
46
|
+
roleVillagerDesc: 'Znajdź ukryte Wilkołaki.',
|
|
47
|
+
roleVillagerSecret: 'Dyskutuj, analizuj i głosuj na podejrzanych graczy.',
|
|
48
|
+
roleMerlinName: 'Merlin',
|
|
49
|
+
roleMerlinDesc: 'Zna agentów zła.',
|
|
50
|
+
roleMerlinSecret: 'Prowadź drużynę do zwycięstwa bez ujawniania się.',
|
|
51
|
+
roleAssassinName: 'Zabójca',
|
|
52
|
+
roleAssassinDesc: 'Może zamordować Merlina na koniec gry.',
|
|
53
|
+
roleAssassinSecret: 'Znajdź Merlina, aby skraść zwycięstwo na samym końcu.',
|
|
54
|
+
roleMinionName: 'Sługa Mordreda',
|
|
55
|
+
roleMinionDesc: 'Poinformowany agent Mordreda.',
|
|
56
|
+
roleMinionSecret: 'Sabotuj misje tak, by nie zostać wykrytym.',
|
|
57
|
+
roleServantName: 'Lojalny Sługa',
|
|
58
|
+
roleServantDesc: 'Wykonuj misje dla Artura.',
|
|
59
|
+
roleServantSecret: 'Dyskutuj, proponuj składy i głosuj logicznie.',
|
|
60
|
+
roleHitlerName: 'Hitler',
|
|
61
|
+
roleHitlerDesc: 'Tajny przywódca faszystów.',
|
|
62
|
+
roleHitlerSecret: 'Zostań wybrany Kanclerzem lub pozwól Faszystom uchwalać ustawy.',
|
|
63
|
+
roleFascistName: 'Faszysta',
|
|
64
|
+
roleFascistDesc: 'Współpracuj, aby uchwalać faszystowskie ustawy.',
|
|
65
|
+
roleFascistSecret: 'Chroń Hitlera i manipuluj wynikami wyborów.',
|
|
66
|
+
roleLiberalName: 'Liberał',
|
|
67
|
+
roleLiberalDesc: 'Znajdź i powstrzymaj faszystowskie zagrożenie.',
|
|
68
|
+
roleLiberalSecret: 'Uchwalaj liberalne ustawy i wyeliminuj Hitlera w miarę możliwości.',
|
|
69
|
+
roleCustomName: 'Własna Rola',
|
|
70
|
+
roleCustomDesc: 'Ogólny opis własnej roli.',
|
|
71
|
+
roleCustomSecret: 'Osiągnij cel swojej drużyny.',
|
|
72
|
+
teamWerewolves: 'Wilkołaki',
|
|
73
|
+
teamVillagers: 'Wieśniacy',
|
|
74
|
+
teamGood: 'Dobro',
|
|
75
|
+
teamEvil: 'Zło',
|
|
76
|
+
teamFascist: 'Faszysta',
|
|
77
|
+
teamLiberal: 'Liberał',
|
|
78
|
+
teamCustom: 'Własna Drużyna',
|
|
79
|
+
secretRoleIs: 'twoja tajna rola to:',
|
|
80
|
+
customRolesTitle: 'Konfiguracja Własnych Ról',
|
|
81
|
+
customRolePlaceholder: 'Wpisz nazwę roli...',
|
|
82
|
+
neutralLabel: 'Neutralny',
|
|
83
|
+
goodLabel: 'Dobry',
|
|
84
|
+
evilLabel: 'Zły',
|
|
85
|
+
customMismatchWarning: 'Skonfiguruj dokładnie tyle samo własnych ról, ilu jest graczy.',
|
|
86
|
+
impostorPresetName: 'Gra w Impostora',
|
|
87
|
+
impostorPresetDesc: 'Przydzielaj role Impostora i Crewmate w konfigurowalnych ilościach.',
|
|
88
|
+
impostorTitle: 'Ustawienia Impostora',
|
|
89
|
+
impostorWarning: 'Potrzebujesz więcej graczy niż impostorów.',
|
|
90
|
+
roleImpostorName: 'Impostor',
|
|
91
|
+
roleImpostorDesc: 'Potajemnie eliminuj Crewmates.',
|
|
92
|
+
roleImpostorSecret: 'Sabotuj i eliminuj, nie dając się złapać.',
|
|
93
|
+
roleCrewmateName: 'Crewmate',
|
|
94
|
+
roleCrewmateDesc: 'Wykonuj zadania i znajdź Impostora.',
|
|
95
|
+
roleCrewmateSecret: 'Tajne słowo to:',
|
|
96
|
+
teamImpostor: 'Impostor',
|
|
97
|
+
teamCrewmate: 'Crewmate',
|
|
98
|
+
impostorSharedSecretLabel: 'Wspólne Tajne Słowo',
|
|
99
|
+
impostorSharedSecretPlaceholder: 'np. Miejsce: Restauracja, lub Słowo: Jabłko',
|
|
100
|
+
impostorModeLabel: 'Tryb Obliczania Impostorów',
|
|
101
|
+
impostorModeFixed: 'Stała Liczba',
|
|
102
|
+
impostorModePercentage: 'Procent (%)',
|
|
103
|
+
impostorModeRange: 'Losowy Zakres',
|
|
104
|
+
impostorFixedLabel: 'Liczba Impostorów',
|
|
105
|
+
impostorPercentageLabel: 'Procent Impostorów (%)',
|
|
106
|
+
impostorRangeMinLabel: 'Minimalna Liczba Impostorów',
|
|
107
|
+
impostorRangeMaxLabel: 'Maksymalna Liczba Impostorów',
|
|
108
|
+
impostorWriterLabel: 'Autor Słowa / Host',
|
|
109
|
+
impostorWriterRandom: 'Host niebędący graczem',
|
|
110
|
+
roleWriterName: 'Autor',
|
|
111
|
+
roleWriterDesc: 'Ty decydujesz o tajnym słowie.',
|
|
112
|
+
writerInputPrompt: 'Jesteś Autorem. Wpisz tajne słowo lub miejsce dla tej gry:',
|
|
113
|
+
writerInputPlaceholder: 'np. Restauracja, Szpital...',
|
|
114
|
+
btnSetWord: 'Zapisz Słowo i Start',
|
|
115
|
+
impostorWriterPreround: 'Tajny Pre-round (Wszyscy gracze)',
|
|
116
|
+
impostorWriterDescHost: 'Host niebędący graczem korzysta z losowego słowa.',
|
|
117
|
+
impostorWriterDescPreround: 'Pre-round pozwala wszystkim graczom potajemnie wpisać słowa, a następnie losuje jedno z nich.',
|
|
118
|
+
impostorWriterDescPlayer: 'Wybrany gracz pisze słowo i nie może być impostorem.',
|
|
119
|
+
preroundPassTitle: 'Pre-round: Przekaż urządzenie do',
|
|
120
|
+
preroundInputPrompt: 'Wpisz potajemnie słowo lub miejsce:',
|
|
121
|
+
preroundPassHint: 'Zachowaj słowo w tajemnicy przed innymi graczami!',
|
|
122
|
+
btnSubmitWord: 'Wyślij Słowo',
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
const faq = [
|
|
126
|
+
{
|
|
127
|
+
question: 'Jak działa Rozdający Ukryte Role?',
|
|
128
|
+
answer: 'Narzędzie pozwala rozdać tajne role w grach dedukcyjnych lokalnie na jednym urządzeniu. Wpisujesz nazwy graczy, wybierasz szablon lub własną pulę ról i przekazujesz telefon kolejnym osobom. Każdy gracz trzyma przycisk ujawniania, by zobaczyć swoją rolę.',
|
|
129
|
+
},
|
|
130
|
+
];
|
|
131
|
+
|
|
132
|
+
const howTo = [
|
|
133
|
+
{
|
|
134
|
+
name: 'Dodaj Graczy',
|
|
135
|
+
text: 'Wpisz nazwy uczestników w panelu konfiguracji.',
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
name: 'Wybierz Szablon',
|
|
139
|
+
text: 'Wybierz gotowy szablon lub stwórz własną pulę ról.',
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
name: 'Przekaż i ujawnij',
|
|
143
|
+
text: 'Przekaż urządzenie każdemu graczowi. Każdy gracz musi nacisnąć i przytrzymać przycisk ujawniania, aby zobaczyć swoją tajną rolę, a następnie kliknąć Dalej.',
|
|
144
|
+
},
|
|
145
|
+
];
|
|
146
|
+
|
|
147
|
+
export const content: ToolLocaleContent<HiddenRoleDealerUI> = {
|
|
148
|
+
slug: 'rozdajacy-ukryte-role-tajne',
|
|
149
|
+
title: 'Rozdający Ukryte Role: Rozdawacz Tożsamości i Kart do Gier Towarzyskich',
|
|
150
|
+
description: 'Rozdawaj tajne role lokalnie w grach takich jak Wilkołak, Avalon, Secret Hitler i Impostor bez użycia fizycznych kart.',
|
|
151
|
+
ui,
|
|
152
|
+
seo: [
|
|
153
|
+
{ type: 'title', text: 'Balansowanie Drużyn w Grach Towarzyskich', level: 2 },
|
|
154
|
+
{ type: 'paragraph', html: 'Prawidłowe zbalansowanie proporcji między graczami dobra i zła jest kluczem do udanej rozgrywki.' },
|
|
155
|
+
],
|
|
156
|
+
faq,
|
|
157
|
+
bibliography,
|
|
158
|
+
howTo,
|
|
159
|
+
schemas: [
|
|
160
|
+
{
|
|
161
|
+
'@context': 'https://schema.org',
|
|
162
|
+
'@type': 'FAQPage',
|
|
163
|
+
'mainEntity': faq.map((f) => ({
|
|
164
|
+
'@type': 'Question',
|
|
165
|
+
'name': f.question,
|
|
166
|
+
'acceptedAnswer': {
|
|
167
|
+
'@type': 'Answer',
|
|
168
|
+
'text': f.answer,
|
|
169
|
+
},
|
|
170
|
+
})),
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
'@context': 'https://schema.org',
|
|
174
|
+
'@type': 'SoftwareApplication',
|
|
175
|
+
'name': ui.title,
|
|
176
|
+
'operatingSystem': 'All',
|
|
177
|
+
'applicationCategory': 'UtilitiesApplication',
|
|
178
|
+
'browserRequirements': 'Requires HTML5. Requires JavaScript.',
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
'@context': 'https://schema.org',
|
|
182
|
+
'@type': 'HowTo',
|
|
183
|
+
'name': ui.setupTitle,
|
|
184
|
+
'step': howTo.map((h) => ({
|
|
185
|
+
'@type': 'HowToStep',
|
|
186
|
+
'name': h.name,
|
|
187
|
+
'text': h.text,
|
|
188
|
+
})),
|
|
189
|
+
},
|
|
190
|
+
],
|
|
191
|
+
};
|