localization

This commit is contained in:
overcuriousity 2025-07-26 00:09:57 +02:00
parent 1419f64ab9
commit 4454046d22
2 changed files with 25 additions and 25 deletions

View File

@ -132,7 +132,7 @@ const { authenticated, userEmail, userId } = authResult;
<p style="margin-bottom: 1.5rem; line-height: 1.6;">
Wenn ihr einen umfangreicheren Beitrag zu einem Tool, einer Methode oder einem Kozept habt, könnt ihr ihn hier einreichen.
Dazu müsst ihr ein kurzes Formular ausfüllen, zusätzlich könnt ihr Dateien einreichen.
Der Upload von beliebigen Dateien und Unterlagen ist hier möglich, und wird manuell von mir integriert.
</p>
<div style="display: flex; flex-wrap: wrap; gap: 0.5rem; margin-bottom: 1.5rem;">
@ -200,7 +200,7 @@ const { authenticated, userEmail, userId } = authResult;
<div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 1.5rem;">
<div>
<h4 style="margin-bottom: 0.75rem; color: var(--color-primary);">Qualitätsstandards</h4>
<h4 style="margin-bottom: 0.75rem; color: var(--color-primary);">Empfehlungen</h4>
<ul style="margin: 0; padding-left: 1.5rem; line-height: 1.6;">
<li>Informationen sollten stets korrekt und up-to-date sein</li>
<li>Nutzt klare, verständliche Sprache</li>
@ -212,7 +212,7 @@ const { authenticated, userEmail, userId } = authResult;
</div>
<div>
<h4 style="margin-bottom: 0.75rem; color: var(--color-accent);">QS</h4>
<h4 style="margin-bottom: 0.75rem; color: var(--color-accent);">Review</h4>
<ul style="margin: 0; padding-left: 1.5rem; line-height: 1.6;">
<li>Alle Beiträge werden transparent als Pull Requests in unserem Git veröffentlicht</li>
<li>Die Inforamtionen werden teilweise automatisiert validiert</li>

View File

@ -35,11 +35,11 @@ const isEdit = !!editTool;
<h1 style="margin-bottom: 1rem; font-size: 2rem;">{isEdit ? `Edit: ${editTool?.name}` : 'Contribute New Tool/Method/Concept'}</h1>
<p style="margin: 0.5rem 0; opacity: 0.9;">
{isEdit
? 'Update the information for this tool. Your changes will be submitted as a pull request.'
: 'Add a new tool, method, or concept to the database. Your contribution will be submitted as a pull request.'
? 'Passt die Informationen für dieses Tool/Methode/Konzept an. Dein Beitrag wird als Git-Issue veröffentlicht.'
: 'Füge ein neues Tool, Methode oder Konzept in unsere Datenbank hinzu. Dein Beitrag wird als Git-Issue veröffentlicht.'
}
</p>
{userEmail && <p style="margin: 0.5rem 0; opacity: 0.8;"><strong>Submitting as:</strong> {userEmail}</p>}
{userEmail && <p style="margin: 0.5rem 0; opacity: 0.8;"><strong>Eingeloggt als:</strong> {userEmail}</p>}
</div>
<!-- Validation Error Display -->
@ -54,7 +54,7 @@ const isEdit = !!editTool;
<!-- Basic Information -->
<div style="border: 1px solid var(--color-border); border-radius: 0.5rem; padding: 1.5rem; margin-bottom: 2rem;">
<h3 style="margin: 0 0 1.5rem 0; color: var(--color-primary); border-bottom: 1px solid var(--color-border); padding-bottom: 0.5rem;">Basic Information</h3>
<h3 style="margin: 0 0 1.5rem 0; color: var(--color-primary); border-bottom: 1px solid var(--color-border); padding-bottom: 0.5rem;">Grundlegende Infos</h3>
<div style="display: grid; grid-template-columns: 1fr 1fr; gap: 1rem; margin-bottom: 1.5rem;">
<div>
@ -62,8 +62,8 @@ const isEdit = !!editTool;
<select id="type" name="type" required>
<option value="">Select type...</option>
<option value="software" selected={editTool?.type === 'software'}>Software/Tool</option>
<option value="method" selected={editTool?.type === 'method'}>Method/Process</option>
<option value="concept" selected={editTool?.type === 'concept'}>Concept/Knowledge</option>
<option value="method" selected={editTool?.type === 'method'}>Methode/Prozess</option>
<option value="concept" selected={editTool?.type === 'concept'}>Konzept/Wissen</option>
</select>
</div>
@ -93,9 +93,9 @@ const isEdit = !!editTool;
</div>
<div style="margin-bottom: 1.5rem;">
<label for="description" style="display: block; margin-bottom: 0.5rem; font-weight: 600;">Description <span style="color: var(--color-error);">*</span></label>
<label for="description" style="display: block; margin-bottom: 0.5rem; font-weight: 600;">Beschreibung <span style="color: var(--color-error);">*</span></label>
<textarea id="description" name="description" rows="4" maxlength="1000" required
placeholder="Clear, concise description of what this tool/method/concept does and its purpose">{editTool?.description || ''}</textarea>
placeholder="Klare, kurze Beschreibung, was dein Tool/Methode/Konzept tut, was sein Zweck ist und was es einzigartig macht.">{editTool?.description || ''}</textarea>
<div style="text-align: right; font-size: 0.75rem; color: var(--color-text-secondary); margin-top: 0.25rem;">
<span id="description-count">0</span>/1000
</div>
@ -105,17 +105,17 @@ const isEdit = !!editTool;
<label for="url" style="display: block; margin-bottom: 0.5rem; font-weight: 600;">Primary URL <span style="color: var(--color-error);">*</span></label>
<input type="url" id="url" name="url" value={editTool?.url || ''}
placeholder="https://example.com" required />
<small style="display: block; margin-top: 0.25rem; color: var(--color-text-secondary); font-size: 0.8125rem;">Homepage, documentation, or primary source</small>
<small style="display: block; margin-top: 0.25rem; color: var(--color-text-secondary); font-size: 0.8125rem;">Homepage, Dokumentation, oder Primärquelle</small>
</div>
</div>
<!-- Categories -->
<div style="border: 1px solid var(--color-border); border-radius: 0.5rem; padding: 1.5rem; margin-bottom: 2rem;">
<h3 style="margin: 0 0 1.5rem 0; color: var(--color-primary); border-bottom: 1px solid var(--color-border); padding-bottom: 0.5rem;">Categories</h3>
<h3 style="margin: 0 0 1.5rem 0; color: var(--color-primary); border-bottom: 1px solid var(--color-border); padding-bottom: 0.5rem;">Kategorien</h3>
<div style="display: grid; grid-template-columns: 1fr 1fr; gap: 2rem;">
<div>
<label style="display: block; margin-bottom: 0.75rem; font-weight: 600;">Forensic Domains</label>
<label style="display: block; margin-bottom: 0.75rem; font-weight: 600;">Forensische Domänen</label>
<div style="display: grid; gap: 0.5rem;">
{domains.map(domain => (
<label class="checkbox-wrapper">
@ -128,7 +128,7 @@ const isEdit = !!editTool;
</div>
<div>
<label style="display: block; margin-bottom: 0.75rem; font-weight: 600;">Investigation Phases</label>
<label style="display: block; margin-bottom: 0.75rem; font-weight: 600;">Phasen der Ermittlung</label>
<div style="display: grid; gap: 0.5rem;">
{phases.map(phase => (
<label class="checkbox-wrapper">
@ -148,7 +148,7 @@ const isEdit = !!editTool;
<div style="display: grid; grid-template-columns: 1fr 1fr; gap: 2rem; margin-bottom: 1.5rem;">
<div>
<label style="display: block; margin-bottom: 0.75rem; font-weight: 600;">Platforms <span id="platforms-required" style="color: var(--color-error);">*</span></label>
<label style="display: block; margin-bottom: 0.75rem; font-weight: 600;">Betrieb auf: <span id="platforms-required" style="color: var(--color-error);">*</span></label>
<div style="display: grid; gap: 0.5rem;">
{['Windows', 'macOS', 'Linux', 'Web', 'Mobile', 'Cross-platform'].map(platform => (
<label class="checkbox-wrapper">
@ -161,7 +161,7 @@ const isEdit = !!editTool;
</div>
<div>
<label for="license" style="display: block; margin-bottom: 0.75rem; font-weight: 600;">License <span id="license-required" style="color: var(--color-error);">*</span></label>
<label for="license" style="display: block; margin-bottom: 0.75rem; font-weight: 600;">Lizenzmodell <span id="license-required" style="color: var(--color-error);">*</span></label>
<input type="text" id="license" name="license" value={editTool?.license || ''}
placeholder="MIT, Apache 2.0, GPL v3, Proprietary" list="license-options" />
<datalist id="license-options">
@ -177,7 +177,7 @@ const isEdit = !!editTool;
<div style="display: grid; grid-template-columns: 1fr 1fr; gap: 2rem;">
<div>
<label for="accessType" style="display: block; margin-bottom: 0.75rem; font-weight: 600;">Access Type</label>
<label for="accessType" style="display: block; margin-bottom: 0.75rem; font-weight: 600;">Zugriff über:</label>
<select id="accessType" name="accessType">
<option value="">Select access type...</option>
<option value="download" selected={editTool?.accessType === 'download'}>Download</option>
@ -189,7 +189,7 @@ const isEdit = !!editTool;
</div>
<div>
<label style="display: block; margin-bottom: 0.75rem; font-weight: 600;">Domain-Agnostic Categories</label>
<label style="display: block; margin-bottom: 0.75rem; font-weight: 600;">Domänenübergreifende Kategorien</label>
<div style="display: grid; gap: 0.5rem;">
{domainAgnosticSoftware.map(cat => (
<label class="checkbox-wrapper">
@ -205,7 +205,7 @@ const isEdit = !!editTool;
<!-- Related Concepts -->
<div id="concepts-fields" style="border: 1px solid var(--color-border); border-radius: 0.5rem; padding: 1.5rem; margin-bottom: 2rem; display: none;">
<h3 style="margin: 0 0 1.5rem 0; color: var(--color-primary); border-bottom: 1px solid var(--color-border); padding-bottom: 0.5rem;">Related Concepts</h3>
<h3 style="margin: 0 0 1.5rem 0; color: var(--color-primary); border-bottom: 1px solid var(--color-border); padding-bottom: 0.5rem;">Konzepte im Zusammenhang</h3>
<div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 0.5rem;">
{existingTools.filter(tool => tool.type === 'concept').map(concept => (
<label class="checkbox-wrapper">
@ -219,26 +219,26 @@ const isEdit = !!editTool;
<!-- Additional Information -->
<div style="border: 1px solid var(--color-border); border-radius: 0.5rem; padding: 1.5rem; margin-bottom: 2rem;">
<h3 style="margin: 0 0 1.5rem 0; color: var(--color-primary); border-bottom: 1px solid var(--color-border); padding-bottom: 0.5rem;">Additional Information</h3>
<h3 style="margin: 0 0 1.5rem 0; color: var(--color-primary); border-bottom: 1px solid var(--color-border); padding-bottom: 0.5rem;">Zusatzinfos</h3>
<div style="margin-bottom: 1.5rem;">
<label for="tags" style="display: block; margin-bottom: 0.5rem; font-weight: 600;">Tags</label>
<input type="text" id="tags" name="tags" value={editTool?.tags?.join(', ') || ''}
placeholder="gui, forensics, network-analysis (comma-separated)" />
placeholder="Komma-getrennt: Passede Begriffe, nach denen ihr suchen würdet." />
</div>
<div style="margin-bottom: 1.5rem;">
<label class="checkbox-wrapper">
<input type="checkbox" id="knowledgebase" name="knowledgebase"
checked={editTool?.knowledgebase} />
<span>Has knowledgebase article</span>
<span>Der Beitrag soll später einen Knowledgebase-Artikel haben</span>
</label>
</div>
<div>
<label for="reason" style="display: block; margin-bottom: 0.5rem; font-weight: 600;">Reason for Contribution (Optional)</label>
<label for="reason" style="display: block; margin-bottom: 0.5rem; font-weight: 600;">Grund für den Beitrag (Optional)</label>
<textarea id="reason" name="reason" rows="3" maxlength="500"
placeholder="Why are you adding/updating this? Any context for reviewers..."></textarea>
placeholder="Hier kannst du noch deine Motivation und sonstige Infos beschreiben."></textarea>
<div style="text-align: right; font-size: 0.75rem; color: var(--color-text-secondary); margin-top: 0.25rem;">
<span id="reason-count">0</span>/500
</div>