feat: add verifiable listings (proof of possession) with verification widget, badge on cards/detail, i18n (7 langs), fix edit prefill for location/monero, prevent edit/delete on pending listings

This commit is contained in:
2026-02-11 08:14:44 +01:00
parent f5cfab6a2a
commit 53673b4650
20 changed files with 754 additions and 34 deletions

View File

@@ -345,5 +345,20 @@
"rate": "Bewertung abgeben",
"rated": "Bewertet",
"memberSince": "Mitglied seit {{date}}"
},
"verification": {
"verify": "Besitz verifizieren",
"optional": "Optional — erhöht das Vertrauen",
"code": "Dein Code",
"validFor": "Gültig noch",
"instructions": "Schreibe diesen Code auf einen Zettel und fotografiere deinen Artikel zusammen mit dem Code.",
"upload": "Verifikationsfoto hochladen",
"verified": "Besitz verifiziert",
"verifiedDate": "Verifiziert am {{date}}",
"expired": "Code abgelaufen — neuen generieren",
"badge": "✓ Verifiziert",
"proofHint": "Der Verkäufer hat diesen Artikel mit einem von kashilo generierten Code fotografiert. Vergleiche den Code im Foto mit dem angezeigten Code.",
"proofCode": "Verifizierungscode",
"proofPhoto": "Verifikationsfoto"
}
}

View File

@@ -345,5 +345,20 @@
"rate": "Leave a rating",
"rated": "Rated",
"memberSince": "Member since {{date}}"
},
"verification": {
"verify": "Verify ownership",
"optional": "Optional — increases trust",
"code": "Your code",
"validFor": "Valid for",
"instructions": "Write this code on a piece of paper and photograph your item together with the code.",
"upload": "Upload verification photo",
"verified": "Ownership verified",
"verifiedDate": "Verified on {{date}}",
"expired": "Code expired — generate new one",
"badge": "✓ Verified",
"proofHint": "The seller photographed this item with a code generated by kashilo. Compare the code in the photo with the code shown here.",
"proofCode": "Verification code",
"proofPhoto": "Verification photo"
}
}

View File

@@ -345,5 +345,20 @@
"rate": "Dejar una valoración",
"rated": "Valorado",
"memberSince": "Miembro desde {{date}}"
},
"verification": {
"verify": "Verificar posesión",
"optional": "Opcional — aumenta la confianza",
"code": "Tu código",
"validFor": "Válido aún",
"instructions": "Escribe este código en un papel y fotografía tu artículo junto con el código.",
"upload": "Subir foto de verificación",
"verified": "Posesión verificada",
"verifiedDate": "Verificado el {{date}}",
"expired": "Código expirado — generar uno nuevo",
"badge": "✓ Verificado",
"proofHint": "El vendedor fotografió este artículo con un código generado por kashilo. Compara el código en la foto con el código mostrado aquí.",
"proofCode": "Código de verificación",
"proofPhoto": "Foto de verificación"
}
}

View File

@@ -345,5 +345,20 @@
"rate": "Donner une évaluation",
"rated": "Évalué",
"memberSince": "Membre depuis {{date}}"
},
"verification": {
"verify": "Vérifier la possession",
"optional": "Optionnel — augmente la confiance",
"code": "Votre code",
"validFor": "Valide encore",
"instructions": "Écrivez ce code sur un papier et photographiez votre article avec le code.",
"upload": "Télécharger la photo de vérification",
"verified": "Possession vérifiée",
"verifiedDate": "Vérifié le {{date}}",
"expired": "Code expiré — générer un nouveau",
"badge": "✓ Vérifié",
"proofHint": "Le vendeur a photographié cet article avec un code généré par kashilo. Comparez le code sur la photo avec le code affiché ici.",
"proofCode": "Code de vérification",
"proofPhoto": "Photo de vérification"
}
}

View File

@@ -345,5 +345,20 @@
"rate": "Lascia una valutazione",
"rated": "Valutato",
"memberSince": "Membro dal {{date}}"
},
"verification": {
"verify": "Verificare il possesso",
"optional": "Opzionale — aumenta la fiducia",
"code": "Il tuo codice",
"validFor": "Valido ancora",
"instructions": "Scrivi questo codice su un foglio e fotografa il tuo articolo insieme al codice.",
"upload": "Carica foto di verifica",
"verified": "Possesso verificato",
"verifiedDate": "Verificato il {{date}}",
"expired": "Codice scaduto — generarne uno nuovo",
"badge": "✓ Verificato",
"proofHint": "Il venditore ha fotografato questo articolo con un codice generato da kashilo. Confronta il codice nella foto con il codice mostrato qui.",
"proofCode": "Codice di verifica",
"proofPhoto": "Foto di verifica"
}
}

View File

@@ -345,5 +345,20 @@
"rate": "Deixar uma avaliação",
"rated": "Avaliado",
"memberSince": "Membro desde {{date}}"
},
"verification": {
"verify": "Verificar posse",
"optional": "Opcional — aumenta a confiança",
"code": "Seu código",
"validFor": "Válido ainda",
"instructions": "Escreva este código em um papel e fotografe seu artigo junto com o código.",
"upload": "Enviar foto de verificação",
"verified": "Posse verificada",
"verifiedDate": "Verificado em {{date}}",
"expired": "Código expirado — gerar novo",
"badge": "✓ Verificado",
"proofHint": "O vendedor fotografou este artigo com um código gerado pelo kashilo. Compare o código na foto com o código exibido aqui.",
"proofCode": "Código de verificação",
"proofPhoto": "Foto de verificação"
}
}

View File

@@ -345,5 +345,20 @@
"rate": "Оставить оценку",
"rated": "Оценено",
"memberSince": "Участник с {{date}}"
},
"verification": {
"verify": "Подтвердить владение",
"optional": "Необязательно — повышает доверие",
"code": "Ваш код",
"validFor": "Действителен ещё",
"instructions": "Напишите этот код на листке бумаги и сфотографируйте ваш товар вместе с кодом.",
"upload": "Загрузить фото подтверждения",
"verified": "Владение подтверждено",
"verifiedDate": "Подтверждено {{date}}",
"expired": "Код истёк — сгенерировать новый",
"badge": "✓ Подтверждено",
"proofHint": "Продавец сфотографировал этот товар с кодом, сгенерированным kashilo. Сравните код на фото с кодом, показанным здесь.",
"proofCode": "Код подтверждения",
"proofPhoto": "Фото подтверждения"
}
}