localization
This commit is contained in:
		
							parent
							
								
									1419f64ab9
								
							
						
					
					
						commit
						4454046d22
					
				@ -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>
 | 
			
		||||
 | 
			
		||||
@ -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>
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user