Compare commits

...

17 Commits

Author SHA1 Message Date
Marvin Sextro 240f73ab5f Remove unnecessary hint 2021-12-02 01:18:02 +01:00
Marvin Sextro d07c6ae232
Merge pull request #127 from covidpass-org/localization
Localization
2021-12-02 01:16:24 +01:00
Marvin Sextro 0c0ddf2a47
Merge pull request #126 from nilaallj/localization
Full Swedish translation
2021-12-02 01:13:59 +01:00
Marvin Sextro 22c00b4052 Added browser warning and minor layout and content improvements 2021-12-02 01:02:20 +01:00
Marvin Sextro 790bdf4494 Remove duplicate dependencies from lock file 2021-12-02 00:58:29 +01:00
Marvin Sextro 1aee8b8d86 Merge branch 'main' into dev 2021-12-02 00:52:26 +01:00
nilaallj 9b0a0a4b81 Full Swedish translation 2021-12-01 21:29:18 +01:00
Marvin Sextro 50d3830fec
Merge pull request #121 from covidpass-org/next12
Upgrade to Next.js 12
2021-11-21 22:48:32 +01:00
Hauke Tönjes 586811c55c
Upgrade to next.js 12 2021-11-11 23:26:17 +01:00
Marvin Sextro 4f749442d6
Merge pull request #110 from covidpass-org/localization
Norwegian Translation
2021-10-09 14:10:05 +02:00
Marvin Sextro c8897532da
Merge pull request #82 from unk1nd/main
Norwegian Translation
2021-10-09 14:02:42 +02:00
Hauke Tönjes cc7fddb2af
Support for other image formats (#95)
* Upgrade packages (#86)

Co-authored-by: Marvin Sextro <marvin.sextro@gmail.com>

* Support JPEG and other image formats; remove pngjs dependency (#93)

* Support JPEG and other image formats; remove pngjs

By using native Canvas to render images it was possible to remove
dependency on external libraries to support image formats while
supporting more formats like JPEG, GIF and WEBP for the QR image

* Constrain images to 2 Mpx

Co-authored-by: Marvin Sextro <marvin.sextro@gmail.com>

* Upgrade packages

Co-authored-by: Marvin Sextro <marvin.sextro@gmail.com>
Co-authored-by: iBobo <andrea@bhweb.it>
2021-09-03 14:34:04 +02:00
Marvin Sextro 8cd341d3ce Integrate norwegian translation 2021-08-13 01:48:54 +02:00
Mikael Bendiksen 980da14ef7 added symlink from no-NB to no folder 2021-08-11 15:14:21 +02:00
Mikael Bendiksen 5281ff52ca norwegian translation 2021-08-11 15:13:14 +02:00
Marvin Sextro de82c494ad
Merge pull request #73 from covidpass-org/dev
Spanish translation
2021-07-31 02:11:55 +02:00
Marvin Sextro 7a9197be85
Merge pull request #70 from covidpass-org/dev
Color selector and translation fixes
2021-07-29 00:34:55 +02:00
35 changed files with 762 additions and 574 deletions

View File

@ -1,24 +1,22 @@
import {useTranslation} from 'next-i18next';
interface AlertProps {
onClose: () => void;
errorMessage: string;
message: string;
isWarning: boolean;
}
function Alert(props: AlertProps): JSX.Element {
const { t } = useTranslation(['index', 'errors']);
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 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">
<title>{t('index:errorClose')}</title>
<path
d="M14.348 14.849a1.2 1.2 0 0 1-1.697 0L10 11.819l-2.651 3.029a1.2 1.2 0 1 1-1.697-1.697l2.758-3.15-2.759-3.152a1.2 1.2 0 1 1 1.697-1.697L10 8.183l2.651-3.031a1.2 1.2 0 1 1 1.697 1.697l-2.758 3.152 2.758 3.15a1.2 1.2 0 0 1 0 1.698z"/>
</svg>
</span>
<div className={`${props.isWarning ? "bg-yellow-100 border border-yellow-400 text-yellow-700" : "bg-red-100 border border-red-400 text-red-700"} px-4 py-3 mt-5 rounded-md relative flex justify-between items-center`} role="alert">
<span className={`${props.isWarning ? "" : "pr-7"} block sm:inline text-lg`} id="message">{props.message}</span>
{
!props.isWarning &&
<span className="absolute top-0 right-0 p-1 m-2" onClick={props.onClose}>
<svg className="text-red-500 fill-current h-6 w-6" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill="currentColor"
d="M6.2253 4.81108C5.83477 4.42056 5.20161 4.42056 4.81108 4.81108C4.42056 5.20161 4.42056 5.83477 4.81108 6.2253L10.5858 12L4.81114 17.7747C4.42062 18.1652 4.42062 18.7984 4.81114 19.1889C5.20167 19.5794 5.83483 19.5794 6.22535 19.1889L12 13.4142L17.7747 19.1889C18.1652 19.5794 18.7984 19.5794 19.1889 19.1889C19.5794 18.7984 19.5794 18.1652 19.1889 17.7747L13.4142 12L19.189 6.2253C19.5795 5.83477 19.5795 5.20161 19.189 4.81108C18.7985 4.42056 18.1653 4.42056 17.7748 4.81108L12 10.5858L6.2253 4.81108Z" />
</svg>
</span>
}
</div>
)
}

View File

@ -1,20 +1,16 @@
import {useTranslation} from 'next-i18next';
interface CheckProps {
text: string;
}
function Check(props: CheckProps): JSX.Element {
const { t } = useTranslation(["index"]);
return (
<li className="flex flex-row space-x-4 items-center">
<svg xmlns="http://www.w3.org/2000/svg" className="h-5 w-5 mx-2 fill-current text-green-500" viewBox="0 0 20 20" fill="currentColor">
<path fillRule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clipRule="evenodd" />
</svg>
{props.text}
</li>
)
return (
<li className="flex flex-row space-x-4 items-center">
<svg xmlns="http://www.w3.org/2000/svg" className="h-5 w-5 mx-2 fill-current text-green-500" viewBox="0 0 20 20" fill="currentColor">
<path fillRule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clipRule="evenodd" />
</svg>
{props.text}
</li>
)
}
export default Check;

View File

@ -59,6 +59,21 @@ function Form(): JSX.Element {
});
}
}, [inputFile])
// Whether Safari is used or not
let [isSafari, setIsSafari] = useState<boolean>(false);
// Check if Safari is used
useEffect(() => {
const navigator = window.navigator;
setIsSafari(
navigator.vendor &&
navigator.vendor.indexOf('Apple') > -1 &&
navigator.userAgent &&
navigator.userAgent.indexOf('CriOS') == -1 &&
navigator.userAgent.indexOf('FxiOS') == -1
)
}, []);
// Show file Dialog
async function showFileDialog() {
@ -102,7 +117,7 @@ function Form(): JSX.Element {
// Start decoding from video device
await codeReader.decodeFromVideoDevice(undefined,
previewElem,
(result, error, controls) => {
(result, _error, controls) => {
if (result !== undefined) {
setQrCode(result);
setFile(undefined);
@ -113,9 +128,6 @@ function Form(): JSX.Element {
setGlobalControls(undefined);
setIsCameraOpen(false);
}
if (error !== undefined) {
setErrorMessage(error.message);
}
}
)
);
@ -164,6 +176,9 @@ function Form(): JSX.Element {
return (
<div>
<form className="space-y-5" id="form" onSubmit={addToWallet}>
{
!isSafari && <Alert isWarning={true} message={t('iosHint')} onClose={() => {}}/>
}
<Card step="1" heading={t('index:selectCertificate')} content={
<div className="space-y-5">
<p>{t('index:selectCertificateDescription')}</p>
@ -171,13 +186,13 @@ function Form(): JSX.Element {
<button
type="button"
onClick={isCameraOpen ? hideCameraView : showCameraView}
className="focus:outline-none h-20 bg-gray-500 hover:bg-gray-700 text-white font-semibold rounded-md">
className="focus:outline-none h-20 bg-gray-400 dark:bg-gray-600 hover:bg-gray-500 text-white font-semibold rounded-md">
{isCameraOpen ? t('index:stopCamera') : t('index:startCamera')}
</button>
<button
type="button"
onClick={showFileDialog}
className="focus:outline-none h-20 bg-gray-500 hover:bg-gray-700 text-white font-semibold rounded-md">
className="focus:outline-none h-20 bg-gray-400 dark:bg-gray-600 hover:bg-gray-500 text-white font-semibold rounded-md">
{t('index:openFile')}
</button>
</div>
@ -195,7 +210,7 @@ function Form(): JSX.Element {
<div className="flex items-center space-x-1">
<svg className="h-4 w-4 text-green-600" fill="none" viewBox="0 0 24 24"
stroke="currentColor">
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth="2" d="M9 5l7 7-7 7"/>
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth="3" d="M9 5l7 7-7 7"/>
</svg>
<span className="w-full truncate">
{
@ -264,7 +279,7 @@ function Form(): JSX.Element {
</form>
<canvas id="canvas" style={{display: "none"}}/>
{
errorMessage && <Alert errorMessage={errorMessage} onClose={() => setErrorMessage(undefined)}/>
errorMessage && <Alert isWarning={false} message={errorMessage} onClose={() => setErrorMessage(undefined)}/>
}
</div>
)

View File

@ -24,7 +24,7 @@ function Page(props: PageProps): JSX.Element {
{props.content}
<footer>
<nav className="nav flex pt-4 flex-row space-x-4 justify-center text-md font-bold flex-wrap">
<nav className="nav flex flex-row space-x-4 justify-center text-md font-bold flex-wrap">
<a href="https://ko-fi.com/marvinsxtr" className="hover:underline">{t('common:donate')}</a>
<a href="https://github.com/marvinsxtr/covidpass" className="hover:underline">{t('common:gitHub')}</a>
<Link href="/privacy"><a className="hover:underline">{t('common:privacyPolicy')}</a></Link>

3
next-env.d.ts vendored
View File

@ -1,6 +1,3 @@
/// <reference types="next" />
/// <reference types="next/types/global" />
/// <reference types="next/image-types/global" />
// NOTE: This file should not be edited
// see https://nextjs.org/docs/basic-features/typescript for more information.

View File

@ -9,7 +9,10 @@ module.exports = {
'fi', 'fi-FI',
'el', 'el-GR', 'el-CY',
'it', 'it-IT', 'it-CH',
'es', 'es-ES'
'es', 'es-ES',
'no', 'no-NO',
'nb', 'nb-NO',
'sv', 'sv-SE', 'sv-FI'
],
localeExtension: 'yml',
},

View File

@ -17,7 +17,7 @@
"do-not-zip": "^1.0.0",
"file-saver": "^2.0.5",
"jsqr": "^1.4.0",
"next": "^11.1.0",
"next": "12",
"next-i18next": "^8.5.1",
"next-seo": "^4.26.0",
"node-fetch": "^2.6.1",

View File

@ -12,14 +12,10 @@ function Imprint(): JSX.Element {
<Card step="§" heading={t('common:imprint')} content={
<div className="space-y-3">
<p className="font-bold">{t('imprint:heading')}</p>
<p>
Marvin Sextro<br />
Wilhelm-Busch-Str. 8A<br />
30167 Hannover<br />
</p>
<p>Marvin Sextro</p>
<p className="font-bold">{t('imprint:contact')}</p>
<p>
<a href="mailto:marvin.sextro@gmail.com" className="underline">marvin.sextro@gmail.com</a>
<a href="mailto:covidpass@marvinsextro.de" className="underline">covidpass@marvinsextro.de</a>
</p>
<p className="font-bold">{t('imprint:euDisputeResolution')}</p>
<p>{t('imprint:euDisputeResolutionParagraph')}</p>

View File

@ -40,9 +40,8 @@ function Index(): JSX.Element {
<Page content={
<div className="space-y-5">
<Card content={
<p>{t('common:subtitle')}&nbsp;{t('index:iosHint')}</p>
<p>{t('common:subtitle')}</p>
}/>
<Form/>
</div>
}/>

View File

@ -49,12 +49,11 @@ function Privacy(): JSX.Element {
</div>
<p className="font-bold">{t('privacy:contact')}</p>
<p>
Marvin Sextro<br/>
Wilhelm-Busch-Str. 8A<br/>
30167 Hannover<br/>
Marvin Sextro
<br/>
{t('privacy:email')}:
&nbsp;
<a href="mailto:marvin.sextro@gmail.com">marvin.sextro@gmail.com</a>
<a href="mailto:covidpass@marvinsextro.de" className="underline">covidpass@marvinsextro.de</a>
<br/>
{t('privacy:website')}:
&nbsp;
@ -137,9 +136,9 @@ function Privacy(): JSX.Element {
</a>
</li>
<li>
PayPal:
Ko-fi:
&nbsp;
<a href="https://www.paypal.com/de/webapps/mpp/ua/privacy-full?locale.x=en_EN" className="underline">
<a href="https://more.ko-fi.com/privacy" className="underline">
{t('common:privacyPolicy')}
</a>
</li>

View File

@ -1,9 +1,7 @@
iosHint: Bitte verwende unter iOS den Safari Browser.
errorClose: Schließen
selectCertificate: Zertifikat auswählen
selectCertificateDescription: |
Scanne den QR-Code auf Deinem Zertifikat oder wähle einen Screenshot oder eine PDF-Datei mit dem QR-Code.
Bitte beachte, dass die Auswahl einer Datei direkt von der Kamera nicht unterstützt wird.
selectCertificateDescription: Scanne den QR-Code auf Deinem Zertifikat oder wähle einen Screenshot oder eine PDF-Datei mit dem QR-Code.
stopCamera: Kamera stoppen
startCamera: Kamera starten
openFile: Datei auswählen

View File

@ -1,9 +1,7 @@
iosHint: Στο iOS, παρακαλώ χρησιμοποιήστε τον περιηγητή Safari.
errorClose: Κλείσιμο
selectCertificate: Επιλογή Πιστοποιητικού
selectCertificateDescription: |
Παρακαλώ σαρώστε τον κωδικό QR του πιστοποιητικού σας ή επιλέξτε ένα στιγμιότυπο οθόνης ή την σελίδα PDF με τον κωδικό QR.
Λάβετε υπόψη πως η απευθείας επιλογή κάποιου αρχείου μέσω της κάμερας, δεν υποστηρίζεται.
selectCertificateDescription: Παρακαλώ σαρώστε τον κωδικό QR του πιστοποιητικού σας ή επιλέξτε ένα στιγμιότυπο οθόνης ή την σελίδα PDF με τον κωδικό QR.
stopCamera: Τερματισμός Κάμερας
startCamera: Εκκίνηση Κάμερας
openFile: Επιλογή Αρχείου

View File

@ -1,9 +1,7 @@
iosHint: On iOS, please use the Safari Browser.
errorClose: Close
selectCertificate: Select Certificate
selectCertificateDescription: |
Please scan the QR code on your certificate or select a screenshot or PDF page with the QR code.
Note that selecting a file directly from camera is not supported.
selectCertificateDescription: Please scan the QR code on your certificate or select a screenshot or PDF page with the QR code.
stopCamera: Stop Camera
startCamera: Start Camera
openFile: Select File

View File

@ -1,9 +1,7 @@
iosHint: En iOS, Por favor use el navegador Safari.
errorClose: Cerrar
selectCertificate: Seleccione Certificado
selectCertificateDescription: |
Escanee el código QR de su certificado, o seleccione una captura de pantalla o un PDF que contenga el código QR.
Tenga en cuenta que no se admite la selección de un archivo directamente desde la cámara.
selectCertificateDescription: Escanee el código QR de su certificado, o seleccione una captura de pantalla o un PDF que contenga el código QR.
stopCamera: Detener Cámara
startCamera: Iniciar Cámara
openFile: Seleccione archivo

View File

@ -1,9 +1,7 @@
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.
selectCertificateDescription: Skannaa todistuksessa oleva QR-koodi tai valitse kuvakaappaus tai PDF-sivu, jossa on QR-koodi.
stopCamera: Lopeta Kamera
startCamera: Käynnistä Kamera
openFile: Valitse Tiedosto

View File

@ -1,9 +1,7 @@
iosHint: Sur iOS, veuillez utiliser le navigateur Safari.
errorClose: Fermez
selectCertificate: Sélectionner le certificat
selectCertificateDescription: |
Veuillez scanner le QR Code de votre certificat ou sélectionner une capture d'écran ou une page PDF avec le QR Code.
Notez que la sélection d'un fichier directement à partir de l'appareil photo n'est pas prise en charge.
selectCertificateDescription: Veuillez scanner le QR Code de votre certificat ou sélectionner une capture d'écran ou une page PDF avec le QR Code.
stopCamera: Arrêter l'appareil photo
startCamera: Démarrer l'appareil photo
openFile: Sélectionner un fichier

View File

@ -1,9 +1,7 @@
iosHint: Su iOS, si prega di utilizzare il browser Safari.
errorClose: Chiudi
selectCertificate: Seleziona il certificato
selectCertificateDescription: |
Scannerizza il codice QR sul tuo certificato o seleziona uno screenshot o una pagina PDF con il codice QR.
Nota che la selezione di un file direttamente dalla fotocamera non è supportata.
selectCertificateDescription: Scannerizza il codice QR sul tuo certificato o seleziona uno screenshot o una pagina PDF con il codice QR.
stopCamera: Blocca Fotocamera
startCamera: Avvia Fotocamera
openFile: Seleziona un File

1
public/locales/nb-NO Symbolic link
View File

@ -0,0 +1 @@
nb

View File

@ -0,0 +1,6 @@
title: CovidPass
subtitle: Legg til EUs digitale COVID -sertifikater i favorittlommebokappene dine.
privacyPolicy: Privacy Policy
donate: Sponsor
gitHub: GitHub
imprint: Avtrykk

View File

@ -0,0 +1,20 @@
noFileOrQrCode: Vennligst skann en QR-kode, eller velg en fil
signatureFailed: Feil under signering av pass på server
decodingFailed: Kunne ikke dekode nyttelast for QR-kode
invalidColor: Ugyldig farge
certificateData: Kunne ikke lese sertifikatdata
nameMissing: Kunne ikke lese navnet
dobMissing: Kunne ikke lese fødselsdatoen
invalidMedicalProduct: Ugyldig medisinsk produkt
invalidCountryCode: Ugyldig landskode
invalidManufacturer: Ugyldig produsent
invalidFileType: Ugyldig filtype
couldNotDecode: Kunne ikke dekode QR-koden fra filen
couldNotFindQrCode: Kunne ikke finne QR-koden i den medfølgende filen
invalidQrCode: Ugyldig QR-kode
certificateType: Fant ingen gyldig sertifikattype
invalidTestResult: Ugyldig testresultat
invalidTestType: Ugyldig testtype
noCameraAccess: Fikk ikke tilgang til kameraet. Kontroller tillatelser under Innstillinger > Safari > Kamera.
noCameraFound: Fant ikke kamera.
safariSupportOnly: På iOS, vennligst bruk Safari nettleseren.

View File

@ -0,0 +1,27 @@
heading: Informasjon i henhold til § 5 TMG
contact: Kontakt
euDisputeResolution: EU Konfliktløsning
euDisputeResolutionParagraph: |
Europakommisjonen tilbyr en plattform for online konfliktløsning (OS) https://ec.europa.eu/consumers/odr.
Du finner e-postadressen vår i avtrykket ovenfor.
consumerDisputeResolution: Forbrukerkonfliktløsning
consumerDisputeResolutionParagraph: Vi er ikke villige eller forpliktet til å delta i konfliktløsningssaker for et forbrukernemnd.
liabilityForContents: Ansvar for innholdet
liabilityForContentsParagraph: |
Som tjenesteleverandør er vi ansvarlig for vårt eget innhold på disse sidene i henhold til § 7 avsnitt 1 TMG under de generelle lovene.
I henhold til §§ 8 til 10 TMG er vi ikke forpliktet til å overvåke overført eller lagret informasjon eller å undersøke omstendigheter som indikerer ulovlig aktivitet.
Forpliktelser til å fjerne eller blokkere bruk av informasjon i henhold til de generelle lovene forblir upåvirket.
Ansvar i denne forbindelse er imidlertid bare mulig fra det tidspunkt et konkret brudd på loven blir kjent.
Hvis vi blir klar over slike overtredelser, fjerner vi det relevante innholdet umiddelbart.
liabilityForLinks: Ansvar for lenker
liabilityForLinksParagraph: |
Vårt tilbud inneholder lenker til eksterne nettsteder til tredjeparter, hvis innhold vi ikke har innflytelse på.
Derfor kan vi ikke påta oss noe ansvar for dette eksterne innholdet.
Den respektive leverandøren eller operatøren av nettstedene er alltid ansvarlig for innholdet på de koblede nettstedene.
De koblede sidene ble sjekket for mulige lovbrudd på tidspunktet for koblingen.
Ulovlig innhold var ikke gjenkjennelig på tidspunktet for koblingen.
En permanent kontroll av innholdet på de lenkete sidene er imidlertid ikke rimelig uten konkrete bevis på brudd på loven.
Hvis vi blir klar over brudd, vil vi fjerne slike lenker umiddelbart.
credits: Kreditere
creditsSource: Med utdrag fra https://www.e-recht24.de/impressum-generator.html
creditsTranslation: Oversatt med https://www.DeepL.com/Translator (free version)

View File

@ -0,0 +1,27 @@
iosHint: På iOS, vennligst bruk Safari nettleseren.
errorClose: Lukk
selectCertificate: Velg Sertifikat
selectCertificateDescription: Skann QR-koden på sertifikatet ditt, eller velg et skjermbilde eller en PDF med QR-koden.
stopCamera: Stopp Kamera
startCamera: Start Kamera
openFile: Velg Fil
foundQrCode: Fant QR-kode!
pickColor: Velg en farge
pickColorDescription: Velg en bakgrunnsfarge for passet ditt.
colorWhite: hvit
colorBlack: svart
colorGrey: grå
colorGreen: grønn
colorIndigo: mørkeblå
colorBlue: blå
colorPurple: lilla
colorTeal: blågrønn
addToWallet: Legg til i Lommebok
dataPrivacyDescription: |
Personvern er av spesiell betydning ved behandling av helserelaterte data.
For å ta en informert beslutning, vennligst les
iAcceptThe: Jeg godtar
privacyPolicy: Personvernerklæring
createdOnDevice: Laget på enheten din
openSourceTransparent: Åpen kildekode og gjennomsiktig
hostedInEU: Driftet i EU

View File

@ -0,0 +1,57 @@
gdprNotice: |
Personvernerklæringen vår er basert på vilkårene som brukes av den europeiske lovgiveren
for vedtakelsen av General Data Protection Regulation (GDPR).
generalInfo: Generell informasjon
generalInfoProcess: |
Hele prosessen med å generere passfilen skjer lokalt i nettleseren din.
For signeringstrinnet sendes bare en hash representasjon av dataene dine til serveren.
generalInfoStoring: Dine data lagres ikke utover den aktive nettlesersessionen, og nettsten bruker ikke informasjonskapsler.
generalInfoThirdParties: Ingen data blir sendt til tredjeparter.
generalInfoHttps: Vi overfører dataene dine sikkert over https.
generalInfoLocation: Serveren vår ligger i Nuremberg, Germany.
generalInfoGitHub: Kildekoden til dette nettstedet er tilgjengelig på
generalInfoLockScreen: Som standard er Apple Wallet pass tilgjengelig fra låseskjermen. Dette kan endres i
settings: innstillinger
generalInfoProvider: |
Serverleverandøren behandler data for å tilby dette nettstedet.
For å bedre forstå hvilke tiltak de tar for å beskytte dataene dine, vennligst les også deres
privacyPolicy: personvernerklæring
andThe: og
dataPrivacyFaq: vanlige spørsmål om personvern
contact: Kontakt
email: Epost
website: Webside
process: Forenklet forklaring av prosessen
processFirst: Først skjer følgende trinn lokalt i nettleseren din
processSecond: Så skjer følgende trinn på serveren vår
processThird: Til slutt skjer følgende trinn lokalt i nettleseren din
processRecognizing: Gjenkjenne og trekke ut QR-kodedataene fra det valgte sertifikatet
processDecoding: Dekoding av dine personlige og helserelaterte data fra QR-kode
processAssembling: Montering av en ufullstendig pass-fil ut av dataene dine
processGenerating: Generere en fil som inneholder hashes av dataene som er lagret i passfilen
processSending: Sender bare filen som inneholder hasjene til serveren vår
processReceiving: Motta og sjekke hashene som ble generert lokalt
processSigning: Signerer filen som inneholder hasjene
processSendingBack: Sender signaturen tilbake
processCompleting: Montering av den signerte passfilen fra den ufullstendige filen generert lokalt og signaturen
processSaving: Lagrer filen på enheten din
locallyProcessedData: Lokalt behandlede data
the:
schema: Skjema for digitalt Covid -sertifikat
specification: inneholder en detaljert spesifikasjon av hvilke data som kan finnes i QR -koden og vil bli behandlet i nettleseren din.
serverProvider: Serverleverandør
serverProviderIs: Serverleverandøren vår er
logFiles: Følgende data kan samles inn og lagres i serverloggfilene
logFilesBrowser: Nettlesertypene og versjonene som brukes
logFilesOs: Operativsystemet som brukes av tilgangssystemet
logFilesReferrer: Nettstedet som et tilgangssystem kommer til nettstedet vårt fra (såkalte henvisninger)
logFilesTime: Dato og klokkeslett for tilgang
logFilesIpAddress: De pseudonymiserte IP-adressene
rights: Dine rettigheter
rightsGranted: I samsvar med GDPR har du følgende rettigheter
rightsAccess: Rett til tilgang til dataene dine; Du har rett til å vite hvilke data som er samlet om deg og hvordan de ble behandlet.
rightsErasure: Rett til å bli glemt; Sletting av dine personlige data.
rightsRectification: Rett til å rette opp; Du har rett til å korrigere unøyaktige data.
rightsPortability: Rett til dataportabilitet; Du har rett til å overføre dataene dine fra et behandlingssystem til et annet.
thirdParties: Tredjeparter knyttet til
appleSync: Apple kan synkronisere passene dine via iCloud

View File

@ -1,9 +1,7 @@
iosHint: Gebruik op iOS de Safari-browser.
errorClose: Sluiten
selectCertificate: Selecteer Certificaat
selectCertificateDescription: |
Scan de QR-code op uw certificaat of selecteer een screenshot of pdf-pagina met de QR-code.
Merk op dat het rechtstreeks vanaf de camera selecteren van een bestand niet wordt ondersteund.
selectCertificateDescription: Scan de QR-code op uw certificaat of selecteer een screenshot of pdf-pagina met de QR-code.
stopCamera: Stop Camera
startCamera: Start Camera
openFile: Selecteer Bestand

1
public/locales/no Symbolic link
View File

@ -0,0 +1 @@
nb

1
public/locales/no-NO Symbolic link
View File

@ -0,0 +1 @@
no

1
public/locales/sv-FI Symbolic link
View File

@ -0,0 +1 @@
sv

1
public/locales/sv-SE Symbolic link
View File

@ -0,0 +1 @@
sv

View File

@ -0,0 +1,6 @@
title: CovidPass
subtitle: Lägg till digitala Covid-certifikat från EU i din favorit­plånboks­app.
privacyPolicy: Integritetspolicy
donate: Sponsra
gitHub: GitHub
imprint: Juridisk info

View File

@ -0,0 +1,20 @@
noFileOrQrCode: Vänligen skanna en QR-kod eller välj en fil
signatureFailed: Fel vid pass-signering på server
decodingFailed: Misslyckades att avkoda QR-kodens nyttolast
invalidColor: Ogiltig färg
certificateData: Misslyckades att läsa in certifikatdata
nameMissing: Inläsning av namn misslyckades
dobMissing: Inläsning av födelsedatum misslyckades
invalidMedicalProduct: Ogiltig medicinsk produkt
invalidCountryCode: Ogiltig landskod
invalidManufacturer: Ogiltig tillverkare
invalidFileType: Ogiltig filtyp
couldNotDecode: Kunde inte avkoda QR-kod från fil
couldNotFindQrCode: Kunde inte hitta QR-kod i försedd fil
invalidQrCode: Ogiltig QR-kod
certificateType: Ingen giltig certifikatstyp hittades
invalidTestResult: Ogiltigt testreultat
invalidTestType: Ogiltig testtyp
noCameraAccess: Nekades tillgång till kamera. Kontrollera behörigheter under Inställningar > Safari > Kamera.
noCameraFound: Kunde inte hitta kamera.
safariSupportOnly: På iOS, vänligen använd Safari som webbläsare.

View File

@ -0,0 +1,26 @@
heading: Information i enlighet med § 5 Tyska telemedielagen (TMG)
contact: Kontakt
euDisputeResolution: Tvistlösning inom EU
euDisputeResolutionParagraph: |
Europeiska kommissionen tillhandahåller en plattform för tvistlösning online via https://ec.europa.eu/consumers/odr.
Du hittar vår e-postadress i stycket ovan.
consumerDisputeResolution: Konsumenttvistlösning / Allmän sklijenämnd
consumerDisputeResolutionParagraph: Vi är inte villiga eller ålagda att delta i tvistlösningsärenden inför en konsumentskiljenämnd.
liabilityForContents: Ansvar för innehåll
liabilityForContentsParagraph: |
Som tjänsteleverantör är vi ansvariga för vårt eget innehåll på dessa sidor i enlighet med § 7 paragraf 1 TMG under de almänna lagarna.
Enligt §§ 8 till 10 TMG är vi inte skyldiga att övervaka överförd eller lagrad information eller undersöka omständligheter som påvisar olaglig verksamhet.
Skyldigheter att radera eller blockera användande av information under de allmänna lagarna förblir opåverkade.
Dock är ansvar i detta avseende endast möjligt från den tidpunkt en konkret överträdelse av lagen blir känd. Om vi blir medvetna om en sådan överträdelse kommer vi obedelbart ta bort den information som är relevant i sammanhanget.
liabilityForLinks: Ansvar för länkar
liabilityForLinksParagraph: |
Vårt erbjudande innehåller länkar till tredjeparters externa webbplatser, vars innehåll vi inte har inflytande över.
Vi kan därför inte åta oss något ansvar för dessa externa innehåll.
Leverantören eller operatören för respektive länkad webbplats är alltid ansvariga för dess respektive innehåll.
De länkade sidorna kontrollerades för eventuella lagliga överträdelser vid den tidpunkt de länkades.
Inget olagligt innehåll kunde påvisas vid tidpunkten för länkning.
Permanenta kontroller av de länkade webbplatsernas innehåll är dock inte rimliga utan konkreta bevis för lagbrott.
Om vi blir medvetna om några överträdelser kommer vi omedelbart radera länkarna ifråga.
credits: Erkännanden
creditsSource: Med utdrag från https://www.e-recht24.de/impressum-generator.html
creditsTranslation: Översatt med https://www.DeepL.com/Translator (gratis version)

View File

@ -0,0 +1,27 @@
iosHint: På iOS, vänligen använd Safari som webbläsare.
errorClose: Stäng
selectCertificate: Välj certifikat
selectCertificateDescription: Vänligen skanna QR-koden på ditt certifikat eller välj en skärmdump eller PDF-fil som innehåller QR-koden.
stopCamera: Stäng kamera
startCamera: Öppna kamera
openFile: Välj fil
foundQrCode: QR-kod hittad!
pickColor: Välj en färg
pickColorDescription: Välj en bakgrundsfärg till ditt pass.
colorWhite: vit
colorBlack: svart
colorGrey: grå
colorGreen: grön
colorIndigo: indigo
colorBlue: blå
colorPurple: lila
colorTeal: turkos
addToWallet: Lägg till i Plånbok
dataPrivacyDescription: |
Datasekretess är av särskild vikt vid bearbetning av hälsorelaterad data.
För att du ska kunna fatta ett välgrundat beslut, vänligen läs
iAcceptThe: Jag godtar
privacyPolicy: integritetspolicyn
createdOnDevice: Skapad på din enhet
openSourceTransparent: Öppen källkod och transparent
hostedInEU: Drivs från EU

View File

@ -0,0 +1,56 @@
gdprNotice: |
Vår integritetspolicy är baserad på de villkår som används av den europeiska lagstiftaren för verkställandet av den allmänna dataskyddsförordningen (GDPR).
generalInfo: Allmän information
generalInfoProcess: |
Hela den process som genererar passfilen sker lokalt i din webbläsare.
Under signeringen skickas endast en kondenserad motsvarighet av din data till servern.
generalInfoStoring: Din data sparas inte utanför den aktiva webbläsar­sessionen och sidan använder sig inte av cookies.
generalInfoThirdParties: Ingen data skickas till tredjeparter.
generalInfoHttps: Vi överför din data säkert över HTTPS.
generalInfoLocation: Vår server är baserad i Nürnberg, Tyskland.
generalInfoGitHub: Källkoden till denna sida finns tillgänglig på
generalInfoLockScreen: Som standrad är kuponger i Apple Plånbok tillgängliga från låsskärmen. Detta kan ändras i
settings: Inställningar
generalInfoProvider: |
Tjänsteleverantören processerar data som sedan används av sidan.
För att bättre förstå vilka åtgärder de vidtar för att skydda din data, vänligen läs deras
privacyPolicy: integritetspolicy
andThe: samt deras
dataPrivacyFaq: FAQ om datasekretess
contact: Kontakt
email: E-post
website: Hemsida
process: Förenklad förklaring av processen
processFirst: Först genomförs följande steg lokalt i din webbläsare
processSecond: Sedan genomförs följande steg på vår server
processThird: Slutligen genomförs följande steg lokalt i din webbläsare
processRecognizing: Datan från QR-koden i ditt valda certifikat identifieras och extraheras
processDecoding: Din personliga hälsorelaterade data från QR-kodens nyttolast avkodas
processAssembling: En ofullständig passfil sätts ihop genom din data
processGenerating: En fil med kondenseringar av den data som finns lagrad i passfilen genereras
processSending: Endast den fil som innehåller kondenseringarna skickas till vår server
processReceiving: De kondenseringar som genererades lokalt tas emot och kontrolleras
processSigning: Filen som innehåller kondenseringarna signeras
processSendingBack: Signaturen skickas tillbaka
processCompleting: En signerad passfil sätts ihop genom signaturen samt den ofullständiga, lokalt genererade filen
processSaving: Filen sparas på din enhet
locallyProcessedData: Lokalt behandlad data
the:
schema: Digital Covid Certificate Schema
specification: innehåller en detaljerad specifikation av den data som finns i QR-koden och som kommer att bearbetas i din webbläsare.
serverProvider: Serverleverantör
serverProviderIs: Vår serverleverantör är
logFiles: Följande data kan komma att samlas in och sparas i serverns loggfiler.
logFilesBrowser: Webbläsartyper och versioner
logFilesOs: Operativsystemet som används av den klient som begär tillgång
logFilesReferrer: Den webbsida från vilken den klient som begärt tillgång har nått vår webbsida (så kallade hänvisare)
logFilesTime: Datum och tid för tillgång
logFilesIpAddress: Den pseudonymiserade IP-adressen
rights: Dina rättigheter
rightsGranted: I enlighet med GDPR har du följande rättigheter
rightsAccess: Rätt till åtkomst av din data; Du har rätt att få veta vilken data som som har samlats in om dig samt hur den har bearbetats.
rightsErasure: Rätten att bli bortglömd; Du har rätt till att få din personliga data raderad.
rightsRectification: Rätt att göra invändningar; Du har rätt till att korrigera felaktiga data.
rightsPortability: Rätt till dataportabilitet; Du har rätt till överförning av din data från ett bearbetningssystem till ett annat.
thirdParties: Länkar till tredjeparter
appleSync: Apple kan komma att synkronisera dina pass via iCloud

View File

@ -16,7 +16,8 @@
"moduleResolution": "node",
"resolveJsonModule": true,
"isolatedModules": true,
"jsx": "preserve"
"jsx": "preserve",
"incremental": true
},
"include": [
"next-env.d.ts",

911
yarn.lock

File diff suppressed because it is too large Load Diff