Skip to content

Commit

Permalink
Merge pull request #48 from covidpass-org/dev
Browse files Browse the repository at this point in the history
Pass improvements and translations
  • Loading branch information
marvinsxtr authored Jul 25, 2021
2 parents 3fcf164 + 4eb2dda commit d9d2115
Show file tree
Hide file tree
Showing 24 changed files with 392 additions and 68 deletions.
2 changes: 1 addition & 1 deletion components/Alert.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ function Alert(props: AlertProps): JSX.Element {

return (
<div className="bg-red-100 border border-red-400 text-red-700 px-4 py-3 mt-5 rounded relative" role="alert">
<span className="block sm:inline" id="message">{props.errorMessage}</span>
<span className="block sm:inline pr-6" id="message">{props.errorMessage}</span>
<span className="absolute top-0 bottom-0 right-0 px-4 py-3" onClick={props.onClose}>
<svg className="fill-current h-6 w-6 text-red-500" role="button" xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 20 20">
Expand Down
31 changes: 29 additions & 2 deletions components/Form.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,11 @@ function Form(): JSX.Element {

// Check if there is a translation and replace message accordingly
const setErrorMessage = (message: string) => {
if (message == undefined) {
_setErrorMessage(undefined);
return;
}

const translation = t('errors:'.concat(message));
_setErrorMessage(translation !== message ? translation : message);
};
Expand Down Expand Up @@ -68,7 +73,20 @@ function Form(): JSX.Element {
const codeReader = new BrowserQRCodeReader();

// Needs to be called before any camera can be accessed
await BrowserQRCodeReader.listVideoInputDevices();
let deviceList: MediaDeviceInfo[];

try {
deviceList = await BrowserQRCodeReader.listVideoInputDevices();
} catch (e) {
setErrorMessage('noCameraAccess');
return;
}

// Check if camera device is present
if (deviceList.length == 0) {
setErrorMessage("noCameraFound");
return;
}

// Get preview Element to show camera stream
const previewElem: HTMLVideoElement = document.querySelector('#cameraPreview');
Expand All @@ -89,6 +107,9 @@ function Form(): JSX.Element {
setGlobalControls(undefined);
setIsCameraOpen(false);
}
if (error !== undefined) {
setErrorMessage(error.message);
}
}
)
);
Expand All @@ -101,6 +122,12 @@ function Form(): JSX.Element {
event.preventDefault();
setLoading(true);

if(navigator.userAgent.match('CriOS')) {
setErrorMessage('safariSupportOnly');
setLoading(false);
return;
}

if (!file && !qrCode) {
setErrorMessage('noFileOrQrCode')
setLoading(false);
Expand Down Expand Up @@ -228,7 +255,7 @@ function Form(): JSX.Element {
{t('index:addToWallet')}
</button>
<div id="spin" className={loading ? undefined : "hidden"}>
<svg className="animate-spin h-5 w-5 ml-2" viewBox="0 0 24 24">
<svg className="animate-spin h-5 w-5 ml-3" viewBox="0 0 24 24">
<circle className="opacity-0" cx="12" cy="12" r="10" stroke="currentColor"
strokeWidth="4"/>
<path className="opacity-75" fill="currentColor"
Expand Down
4 changes: 3 additions & 1 deletion next-i18next.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@ module.exports = {
locales: [
'en',
'de', 'de-DE', 'de-AT', 'de-LI', 'de-LU', 'de-CH',
'fr', 'fr-BE', 'fr-CH', 'fr-FR', 'fr-LU', 'fr-MC'
'fr', 'fr-BE', 'fr-CH', 'fr-FR', 'fr-LU', 'fr-MC',
'nl', 'nl-NL', 'nl-BE',
'fi', 'fi-FI'
],
localeExtension: 'yml',
},
Expand Down
3 changes: 1 addition & 2 deletions pages/privacy.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -35,11 +35,10 @@ function Privacy(): JSX.Element {
</li>
<li>
{t('privacy:generalInfoProvider')}
&nbsp;
<a href="https://www.hetzner.com/de/rechtliches/datenschutz/" className="underline">
{t('privacy:privacyPolicy')}
</a>
&nbsp;
&nbsp;
{t('privacy:andThe')}
&nbsp;
<a href="https://docs.hetzner.com/general/general-terms-and-conditions/data-privacy-faq/privacy.tsx" className="underline">
Expand Down
5 changes: 4 additions & 1 deletion public/locales/de/errors.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,7 @@ couldNotFindQrCode: QR-Code konnte in der ausgewählten Datei nicht gefunden wer
invalidQrCode: Ungültiger QR-Code
certificateType: Kein gültiger Zertifikatstyp gefunden
invalidTestResult: Ungültiges Testergebnis
invalidTestType: Ungültiger Testtyp
invalidTestType: Ungültiger Testtyp
noCameraAccess: Kein Zugriff auf die Kamera möglich. Überprüfe die Berechtigungen unter Einstellungen > Safari > Kamera.
noCameraFound: Keine Kamera gefunden.
safariSupportOnly: Bitte verwende unter iOS den Safari Browser.
5 changes: 4 additions & 1 deletion public/locales/en/errors.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,7 @@ couldNotFindQrCode: Could not find QR Code in provided file
invalidQrCode: Invalid QR code
certificateType: No valid certificate type found
invalidTestResult: Invalid test result
invalidTestType: Invalid test type
invalidTestType: Invalid test type
noCameraAccess: Could not access camera. Check permissions under Settings > Safari > Camera.
noCameraFound: Could not find camera.
safariSupportOnly: On iOS, please use the Safari Browser.
2 changes: 1 addition & 1 deletion public/locales/en/privacy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ dataPrivacyFaq: data privacy FAQ
contact: Contact
email: Email
website: Website
process: Simplified of the process
process: Simplified explanation of the process
processFirst: First, the following steps happen locally in your browser
processSecond: Second, the following steps happen on our server
processThird: Finally, the following steps happen locally in your browser
Expand Down
1 change: 1 addition & 0 deletions public/locales/fi-FI
5 changes: 5 additions & 0 deletions public/locales/fi/common.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
title: CovidPass
subtitle: Lisää EU:n koronatodistus suosikkilompakkosovellukseesi.
privacyPolicy: Tietosuojaseloste
gitHub: GitHub
imprint: Imprint
20 changes: 20 additions & 0 deletions public/locales/fi/errors.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
noFileOrQrCode: Skannaa QR koodi tai valitse tiedosto
signatureFailed: Virhe allekirjoitettaessa passia palvelimella
decodingFailed: QR-koodin hyötykuorman purkaminen epäonnistui
invalidColor: Väärä väri
certificateData: Varmenteen tietojen lukeminen epäonnistui
nameMissing: Nimen lukeminen epäonnistui
dobMissing: Syntymäaikaa ei onnistuttu lukemaan
invalidMedicalProduct: Virheellinen lääkevalmiste
invalidCountryCode: Virheellinen maakoodi
invalidManufacturer: Virheellinen valmistaja
invalidFileType: Virheellinen tiedostotyyppi
couldNotDecode: QR-koodia ei voitu purkaa tiedostosta
couldNotFindQrCode: QR-koodia ei löytynyt annetusta tiedostosta
invalidQrCode: Virheellinen QR-koodi
certificateType: Kelvollista varmennetyyppiä ei löytynyt
invalidTestResult: Virheellinen testitulos
invalidTestType: Virheellinen testityyppi
noCameraAccess: Kameraan ei päässyt käsiksi. Tarkista käyttöoikeudet kohdasta Asetukset > Safari > Kamera.
noCameraFound: En löytänyt kameraa.
safariSupportOnly: Käytä iOS:ssä Safari-selainta.
27 changes: 27 additions & 0 deletions public/locales/fi/imprint.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
heading: TMG 5 §:n mukaiset tiedot
contact: Yhteystiedot
euDisputeResolution: EU:n riidanratkaisu
euDisputeResolutionParagraph: |
Euroopan komissio tarjoaa foorumin verkkovälitteistä riidanratkaisua varten https://ec.europa.eu/consumers/odr.
Sähköpostiosoitteemme löytyy yllä olevasta painatuksesta.
consumerDisputeResolution: Kuluttajariitojen ratkaiseminen / yleinen välimieslautakunta
consumerDisputeResolutionParagraph: Emme ole halukkaita tai velvollisia osallistumaan riidanratkaisumenettelyyn kuluttajasovittelulautakunnassa.
liabilityForContents: Vastuu sisällöstä
liabilityForContentsParagraph: |
Palveluntarjoajana olemme yleisten lakien 7 §:n 1 momentin TMG:n mukaisesti vastuussa näiden sivujen sisällöstä.
TMG:n 8-10 §:n mukaan emme ole velvollisia valvomaan siirrettyjä tai tallennettuja tietoja tai tutkimaan olosuhteita, jotka viittaavat laittomaan toimintaan.
Yleisten lakien mukaiset velvollisuudet poistaa tai estää tietojen käyttö säilyvät ennallaan.
Vastuu tässä suhteessa on kuitenkin mahdollista vasta siitä hetkestä alkaen, kun konkreettinen lain rikkominen tulee tietoon.
Jos saamme tietää tällaisista rikkomuksista, poistamme asianomaisen sisällön välittömästi.
liabilityForLinks: Vastuu linkeistä
liabilityForLinksParagraph: |
Tarjouksemme sisältää linkkejä kolmansien osapuolten ulkoisille verkkosivustoille, joiden sisältöön emme voi vaikuttaa.
Siksi emme voi ottaa vastuuta näistä ulkoisista sisällöistä.
Linkitettyjen sivustojen sisällöstä on aina vastuussa kyseisten sivustojen tarjoaja tai ylläpitäjä.
Linkitetyt sivut on tarkistettu mahdollisten lainrikkomusten varalta linkittämishetkellä.
Laitonta sisältöä ei ollut tunnistettavissa linkittämishetkellä.
Linkitettyjen sivujen sisällön jatkuva valvonta ei kuitenkaan ole järkevää ilman konkreettisia todisteita lainrikkomuksesta.
Jos saamme tietoiseksi rikkomuksista, poistamme tällaiset linkit välittömästi.
credits: Kiitokset
creditsSource: Otteita osoitteesta https://www.e-recht24.de/impressum-generator.html
creditsTranslation: Käännetty osoitteella https://www.DeepL.com/Translator (ilmainen versio).
26 changes: 26 additions & 0 deletions public/locales/fi/index.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
iosHint: Käytä iOS:ssä Safari-selainta.
errorClose: Sulje
selectCertificate: Valitse todistus
selectCertificateDescription: |
Skannaa todistuksessa oleva QR-koodi tai valitse kuvakaappaus tai PDF-sivu, jossa on QR-koodi.
Huomaa, että tiedoston valitsemista suoraan kamerasta ei tueta.
stopCamera: Lopeta Kamera
startCamera: Käynnistä Kamera
openFile: Valitse Tiedosto
foundQrCode: QR koodi löytyi!
pickColor: Valitse väri
pickColorDescription: Valitse passisi taustaväri.
colorWhite: Valkoinen
colorBlack: Musta
colorGrey: Harmaa
colorGreen: Vihreä
colorIndigo: Indigonsininen
colorBlue: Sininen
colorPurple: Purppura
colorTeal: Sinivihreä
addToWallet: Lisää lompakkoon.
dataPrivacyDescription: |
Tietosuoja on erityisen tärkeää, kun käsitellään terveyteen liittyviä tietoja.
Jotta voisit tehdä tietoon perustuvan päätöksen, lue seuraavat tiedot
iAcceptThe: Hyväksyn
privacyPolicy: Tietosuojaselosteen
56 changes: 56 additions & 0 deletions public/locales/fi/privacy.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
gdprNotice: |
Tietosuojakäytäntömme perustuu Euroopan lainsäätäjän yleisen tietosuoja-asetuksen (GDPR) hyväksymisen yhteydessä käyttämiin termeihin.
generalInfo: Yleistä tietoa
generalInfoProcess: |
Koko passitiedoston luomisprosessi tapahtuu paikallisesti selaimessasi.
Allekirjoitusvaihetta varten palvelimelle lähetetään vain hashed versio tiedoistasi.
generalInfoStoring: Tietojasi ei tallenneta aktiivisen selainistunnon jälkeen, eikä sivusto käytä evästeitä.
generalInfoThirdParties: Tietoja ei lähetetä kolmansille osapuolille.
generalInfoHttps: Lähetämme tietosi turvallisesti https:n kautta.
generalInfoLocation: Palvelimemme sijaitsee Tuusulassa.
generalInfoGitHub: The source code of this site is available on
generalInfoLockScreen: Oletusarvoisesti Apple Wallet -passit ovat käytettävissä lukitusnäytöstä. Tämän voi muuttaa
settings: asetukissa
generalInfoProvider: |
Palveluntarjoaja käsittelee tietoja tämän sivuston tarjoamiseksi.
Jotta ymmärtäisit paremmin, mitä toimenpiteitä he toteuttavat tietojesi suojaamiseksi, lue myös heidän palveluntarjoajansa tiedot.
privacyPolicy: tietosuojakäytäntö
andThe: ja
dataPrivacyFaq: tietosuoja FAQ
contact: Yhteystiedot
email: Email
website: Verkkosivu
process: Prosessin yksinkertaistaminen
processFirst: Seuraavat vaiheet tapahtuvat ensin paikallisesti selaimessasi.
processSecond: Toiseksi palvelimellamme suoritetaan seuraavat vaiheet
processThird: Lopuksi seuraavat vaiheet tapahtuvat paikallisesti selaimessasi
processRecognizing: QR-koodin tietojen tunnistaminen ja poimiminen valitusta varmenteesta.
processDecoding: Henkilökohtaisten ja terveyteen liittyvien tietojen purkaminen QR-koodin hyötykuormasta.
processAssembling: Epätäydellisen syötetiedoston kokoaminen omista tiedoistasi
processGenerating: Luodaan tiedosto, joka sisältää passitiedostoon tallennettujen tietojen hashit.
processSending: Lähetetään palvelimellemme vain hasheja sisältävä tiedosto.
processReceiving: Paikallisesti luotujen hashien vastaanottaminen ja tarkistaminen.
processSigning: Hashit sisältävän tiedoston allekirjoittaminen
processSendingBack: Allekirjoituksen lähettäminen takaisin
processCompleting: Allekirjoitetun passitiedoston kokoaminen paikallisesti luodusta epätäydellisestä tiedostosta ja allekirjoituksesta.
processSaving: Tiedoston tallentaminen laitteeseen
locallyProcessedData: Paikallisesti käsitellyt tiedot
the: The
schema: Digitaalisen Covid-varmenteen skeema
specification: sisältää yksityiskohtaisen määrittelyn siitä, mitä tietoja QR-koodi voi sisältää ja mitä tietoja selaimesi käsittelee.
serverProvider: Palveluntarjoaja
serverProviderIs: Meidän palveluntarjoaja on
logFiles: Palvelimen lokitiedostoihin voidaan kerätä ja tallentaa seuraavia tietoja
logFilesBrowser: Käytetty selaintyyppi ja -versio
logFilesOs: Käyttöjärjestelmä
logFilesReferrer: Verkkosivusto, josta käyttäjä saapuu verkkosivustollemme (ns. viittaajat).
logFilesTime: Päivämäärä ja kellonaika
logFilesIpAddress: Pseudonymisoidut IP-osoitteet
rights: Sinun oikeutesi
rightsGranted: Yleisen tietosuoja-asetuksen mukaisesti sinulla on seuraavat oikeudet
rightsAccess: Oikeus tutustua tietoihin; Sinulla on oikeus tietää, mitä tietoja sinusta on kerätty ja miten niitä on käsitelty.
rightsErasure: Oikeus tulla unohdetuksi; henkilötietojesi poistaminen.
rightsRectification: Oikaisuoikeus; Sinulla on oikeus korjata virheelliset tiedot.
rightsPortability: Oikeus tietojen siirrettävyyteen; Sinulla on oikeus siirtää tietosi käsittelyjärjestelmästä toiseen.
thirdParties: Kolmannet osapuolet
appleSync: Apple saattaa synkronoida koronapassisi iCloudin kautta
8 changes: 7 additions & 1 deletion public/locales/fr/errors.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ noFileOrQrCode: Veuillez scanner un QR Code ou sélectionner un fichier
signatureFailed: Erreur lors de la signature du pass sur le serveur
decodingFailed: Échec du décodage du QR Code
invalidColor: Couleur non valide
vaccinationInfo: Échec de la lecture des informations de vaccination
certificateData: Échec de la lecture des données du certificat
nameMissing: Échec de la lecture du nom
dobMissing: Échec de la lecture de la date de naissance
invalidMedicalProduct: Produit vaccinal non valide
Expand All @@ -12,3 +12,9 @@ invalidFileType: Type de fichier non valide
couldNotDecode: Impossible de décoder le QR Code du fichier
couldNotFindQrCode: Impossible de trouver le QR Code dans le fichier fourni
invalidQrCode: QR Code non valide
certificateType: Aucun type de certificat valide n'a été trouvé
invalidTestResult: Résultat du test non valide
invalidTestType: Type de test non valide
noCameraAccess: Impossible d'accéder à la caméra. Vérifiez les autorisations sous Paramètres > Safari > Appareil photo.
noCameraFound: Impossible de trouver la caméra.
safariSupportOnly: Sur iOS, veuillez utiliser le navigateur Safari.
2 changes: 1 addition & 1 deletion public/locales/fr/index.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ selectCertificateDescription: |
stopCamera: Arrêter l'appareil photo
startCamera: Démarrer l'appareil photo
openFile: Sélectionner un fichier
foundQrCode: Code QR trouvé!
foundQrCode: Code QR trouvé !
pickColor: Choisissez une couleur
pickColorDescription: Choisissez une couleur de fond pour votre passe.
colorWhite: blanc
Expand Down
10 changes: 5 additions & 5 deletions public/locales/fr/privacy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ dataPrivacyFaq: FAQ sur la confidentialité des données
contact: Contact
email: Email
website: Site web
process: Simplification du processus
process: Explication simplifiée du processus
processFirst: Premièrement, les étapes suivantes se déroulent localement dans votre navigateur.
processSecond: Ensuite, les étapes suivantes se déroulent sur notre serveur
processThird: Enfin, les étapes suivantes se déroulent localement dans votre navigateur
Expand Down Expand Up @@ -49,9 +49,9 @@ logFilesTime: La date et l'heure de l'accès.
logFilesIpAddress: Les adresses IP pseudonymisées
rights: Vos droits
rightsGranted: Conformément au RGPD, vous disposez des droits suivants
rightsAccess: Droit d'accès à vos données; Vous avez le droit de savoir quelles données ont été collectées à votre sujet et comment elles ont été traitées.
rightsErasure: Droit à l'oubli; Effacement de vos données personnelles.
rightsRectification: Droit de rectification; Vous avez le droit de corriger des données inexactes.
rightsPortability: Droit à la portabilité des données; Vous avez le droit de transférer vos données d'un système de traitement à un autre.
rightsAccess: Droit d'accès à vos données ; Vous avez le droit de savoir quelles données ont été collectées à votre sujet et comment elles ont été traitées.
rightsErasure: Droit à l'oubli ; Effacement de vos données personnelles.
rightsRectification: Droit de rectification ; Vous avez le droit de corriger des données inexactes.
rightsPortability: Droit à la portabilité des données ; Vous avez le droit de transférer vos données d'un système de traitement à un autre.
thirdParties: Tiers liés
appleSync: Apple peut synchroniser vos passes via iCloud.
1 change: 1 addition & 0 deletions public/locales/nl-BE
1 change: 1 addition & 0 deletions public/locales/nl-NL
6 changes: 6 additions & 0 deletions public/locales/nl/common.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
title: CovidPass
subtitle: Voeg uw EU Digitaal COVID-certificaten toe aan uw favoriete wallet-apps.
privacyPolicy: Privacybeleid
donate: Doneer
gitHub: GitHub
imprint: Over
20 changes: 20 additions & 0 deletions public/locales/nl/errors.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
noFileOrQrCode: Scan een QR-code of selecteer een bestand
signatureFailed: Fout bij het ondertekenen van de pass op de server
decodingFailed: Kan de payload van de QR-code niet decoderen
invalidColor: Ongeldige kleur
certificateData: Kan certificaatgegevens niet lezen
nameMissing: Kan naam niet lezen
dobMissing: Kan geboortedatum niet lezen
invalidMedicalProduct: Ongeldig medisch product
invalidCountryCode: Ongeldige landcode
invalidManufacturer: Ongeldige fabrikant
invalidFileType: Ongeldig bestandstype
couldNotDecode: Kon QR-code niet uit bestand decoderen
couldNotFindQrCode: Kon de QR-code niet vinden in het verstrekte bestand
invalidQrCode: Ongeldige QR-code
certificateType: Geen geldig certificaattype gevonden
invalidTestResult: Ongeldig testresultaat
invalidTestType: Ongeldig testtype
noCameraAccess: Kon geen toegang krijgen tot de camera. Controleer de machtigingen onder Instellingen > Safari > Camera.
noCameraFound: Ik kon de camera niet vinden.
safariSupportOnly: Gebruik op iOS de Safari-browser.
Loading

0 comments on commit d9d2115

Please sign in to comment.