Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Introduce macros in the translation files #802

Merged
merged 3 commits into from
Oct 24, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions cypress/integration/use-cases/wizard.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@ describe('Using the wizard', () => {
cy.setCookie('country', 'de');
cy.visit('/');

// Ensure translation macros work.
cy.get('#home-main-copy').contains('Here at datarequests.org');

cy.get('#wizard-anchor').scrollIntoView();

cy.get('.wizard-selected-list .button.icon-trash')
Expand Down
3 changes: 2 additions & 1 deletion layouts/partials/footer.html
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@
<footer id="footer">
<div class="container">
<div class="col33 footer-col" style="padding-right: 20px;">
<p style="margin: 0;">{{ T "footer-about-us" | safeHTML }}</p>
{{ $learnMoreLink := (partial "functions/link" (dict "slug" "/verein" "text" "footer-learn-more" "translate" true)) }}
<p style="margin: 0;">{{ T "footer-about-us" | safeHTML }} <a href="{{ $learnMoreLink.url }}">{{ $learnMoreLink.text }}</a></p>
<div class="social-icons">
<a href="{{ "/blog/index.xml" | absLangURL }}" class="icon icon-rss" title="{{ T "footer-social-rss-desc" . }}"><span class="sr-only">{{ T "footer-social-rss-desc" . }}</span></a>
<a rel="me" href="https://github.com/datenanfragen/" class="icon icon-github" title="{{ T "footer-social-github-desc" . }}"><span class="sr-only">{{ T "footer-social-github-desc" . }}</span></a>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,18 @@ module.exports = function (content) {

// Since we now support languages where we cannot guarantee that all strings are always translated, we now need to
// fallback to English for untranslated strings.
const en = require('../i18n/en.json');
const en = require('../src/i18n/en.json');
data = deepmerge(en, data);

// Macros allow us set set common strings (like the site name) once in the translations, and then use that value in
// many places. Macros are used by inserting `${macro_name}` somewhere in a translation, where `macro_name` is the
// key of the translation under the `macros` context that sets the macro's value.
content = JSON.stringify(data);
for (const [name, value] of Object.entries(data.macros)) {
content = content.replace(new RegExp(`\\\${${name}}`, 'g'), value);
mal-tee marked this conversation as resolved.
Show resolved Hide resolved
}
data = JSON.parse(content);

// Emit the translation files for Hugo.
if (data.hugo) {
// Hugo always requires setting the translation as an object with at least the `other` key set even if there are
Expand Down Expand Up @@ -45,7 +54,7 @@ module.exports = function (content) {
.filter((f) => f.endsWith('.json'))
.map((f) => path.basename(f, '.json'));
const requests_translations = languages.reduce((acc, cur) => {
const translations = require(`../i18n/${cur}.json`);
const translations = require(`../src/i18n/${cur}.json`);
if (translations.requests) return { ...acc, [cur]: translations.requests };
return acc;
}, {});
Expand Down
1 change: 1 addition & 0 deletions src/i18n/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
* Introduce Hugo to the new language in `config/_default/languages.toml`.
* Add a base URL in `config/production/languages.toml` and copy one of the existing blocks in `config/development/languages.toml` for the new language.
* In `src/general.js`, add a fallback country in `guessUserCountry()`.
* In the translation file for the new language, set the values for the `macros` context.
* In all translation files, under `i18n-widget`, add the new language if necessary.
* In the deploy script `deploy.sh`, make sure to also copy the companies and SVAs for the new language.
* Add the new language to the `languageFiles` for `preact-i18n` in `.eslintrc.js`.
Expand Down
19 changes: 10 additions & 9 deletions src/i18n/cs.json
Original file line number Diff line number Diff line change
Expand Up @@ -319,9 +319,9 @@
"travel": "cestování",
"utility": "služby",
"logo": "img/logo-datarequests.svg",
"logo-title": "logo datarequests.org",
"logo-title": "logo ${site_name}",
"logo-a-title": "Zpět na hlavní stranu",
"header-name": "datarequests.org",
"header-name": "${site_name}",
"header-home": "Hlavní strana",
"header-generator": "Generátor žádostí",
"header-cdb": "Databáze společností",
Expand Down Expand Up @@ -363,9 +363,10 @@
"categories": "Kategorie",
"collection agency": "exekutorský úřad",
"commerce": "obchod",
"home-main-copy": "Každá společnost v EU je zákonem povinnována Vám umožnit přístup k Vašim osobním údajům, opravit je nebo dokonce je smazat a ještě více. Tady na datarequests.org Vám chceme pomoci využívat tato práva.",
"home-main-copy": "Každá společnost v EU je zákonem povinnována Vám umožnit přístup k Vašim osobním údajům, opravit je nebo dokonce je smazat a ještě více. Tady na ${site_name} Vám chceme pomoci využívat tato práva.",
"header-open-menu": "Otevřít menu",
"footer-about-us": "Jsme Datenanfragen.de e.&nbsp;V., registrovaná nezisková organizace z Německa. Naším cílem je pomáhat lidem využívat jejich právo na soukromí. <a href='https://www.datarequests.org/verein' class='no-link-decoration'>Zjistěte více.</a>",
"footer-about-us": "Jsme Datenanfragen.de e.&nbsp;V., registrovaná nezisková organizace z Německa. Naším cílem je pomáhat lidem využívat jejich právo na soukromí.",
"footer-learn-more": "Zjistěte více.",
"home-hero-word": "přístup k datům",
"home-hero-line-2": "Využijte toho",
"home-how-it-works-parameters": "Vyberte společnosti, kterým byste rádi poslali žádost. Zadejte svoje údaje, tak akorát, aby Vás společnost mohla identifikovat. Abychom to ulehčili, připravili jsme pro Vás formuláře. A žádné obavy: všechny údaje zůstávají na Vašem počítači a jsou zpracovávány na něm. To zajišťuje, že Vaše data k nám nikdy nedoputují.",
Expand Down Expand Up @@ -410,7 +411,7 @@
"cdb-warning-unverified": "<strong>Upozornění</strong>: <em>Neověřovali</em> jsme detaily v tomto záznamu, byly automaticky importovány. Je něco špatně? Velmi bychom ocenili, když <a href='{{ .editUrl }}'>navrhnete opravu</a>. Děkujeme za pomoc!",
"cdb-back-to-overview": "Zpátky na přehled",
"cdb-send-request": "Pošlete žádost",
"footer-tab-website-name": "datarequests.org",
"footer-tab-website-name": "${site_name}",
"cdb-suggest-new": "Navrhněte novou společnost",
"cdb-cc0-explanation": "Tato databáze je licencována pod CC0 1.0 Univerzální licencí.",
"cdb-json-download": "Zobrazit ve strojově čitelném JSONu",
Expand Down Expand Up @@ -498,11 +499,11 @@
"letter": "dopis",
"generate-request": "Vytvořit žádost",
"ics-summary": "Žádost(i) do",
"ics-desc": "Odeslal(a) jste žádosti podle GDPR společnostem uvedeným níže pomocí \n datarequests.org. Doba pro vyřízení těchto žádostí už uplynula. Pokud jste \n nedostal(a) odpověď na jednu nebo více z těchto žádostí, můžete poslat \n varování: \n https://www.datarequests.org/my-requests",
"ics-url": "https://www.datarequests.org/my-requests",
"ics-desc": "Odeslal(a) jste žádosti podle GDPR společnostem uvedeným níže pomocí \n ${site_name}. Doba pro vyřízení těchto žádostí už uplynula. Pokud jste \n nedostal(a) odpověď na jednu nebo více z těchto žádostí, můžete poslat \n varování: \n ${base_url}/my-requests",
"ics-url": "${base_url}/my-requests",
"and": "a",
"toggle-all": "Připnout všechny",
"ics-title": "Moje žádosti na datarequests.org"
"ics-title": "Moje žádosti na ${site_name}"
},
"generator": {
"ok": "OK",
Expand Down Expand Up @@ -675,7 +676,7 @@
"search": "Funkce vyhledávání",
"title": "Nastavení soukromí",
"cancel": "Zrušit",
"explanation": "<p>Hluboce si vážíme Vašeho práva na soukromí a snažíme se omezovat sběr a zpracování dat, jak je to možné. Většina funkcí na datarequests.org běží přímo na Vašem počítači a údaje, které zadáte nikdy nebudou odeslány na naše servery. Existují nicméně některé funkce, které Vám nemůžeme nabídnout bez sběru nějakých dat (většina nastavení i na této stránce to ale <strong>nevyžadují</strong>).<br>Zde máte možnost se rozhodnout, které funkce chcete povolit.</p><p>Pokud zvolíte některou z možností níže, Vaše volba bude uložena pomocí cookies. Pokud nenajdeme pro danou možnost cookie, použijeme výchozí hodnotu, kterou jsme zvolili my.</p>",
"explanation": "<p>Hluboce si vážíme Vašeho práva na soukromí a snažíme se omezovat sběr a zpracování dat, jak je to možné. Většina funkcí na ${site_name} běží přímo na Vašem počítači a údaje, které zadáte nikdy nebudou odeslány na naše servery. Existují nicméně některé funkce, které Vám nemůžeme nabídnout bez sběru nějakých dat (většina nastavení i na této stránce to ale <strong>nevyžadují</strong>).<br>Zde máte možnost se rozhodnout, které funkce chcete povolit.</p><p>Pokud zvolíte některou z možností níže, Vaše volba bude uložena pomocí cookies. Pokud nenajdeme pro danou možnost cookie, použijeme výchozí hodnotu, kterou jsme zvolili my.</p>",
"clear-cookies": "Vymazat všechny cookies",
"clear-my-requests": "Vymazat všechny uložené žádosti",
"confirm-delete-my-requests": "Zakázal(a) jste funkci \"moje žádosti\". Chcete také vymazat všechny uložené žádosti?",
Expand Down
23 changes: 14 additions & 9 deletions src/i18n/de.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
{
"macros": {
"site_name": "Datenanfragen.de",
"base_url": "https://www.datenanfragen.de"
},
"hugo": {
"categories": "Kategorien",
"addresses": "Adressen",
Expand All @@ -20,9 +24,9 @@
"travel": "Reise",
"utility": "Versorgung",
"logo": "img/logo-datenanfragen.svg",
"logo-title": "Datenanfragen.de-Logo",
"logo-title": "${site_name}-Logo",
"logo-a-title": "Zur Startseite",
"header-name": "Datenanfragen.de",
"header-name": "${site_name}",
"header-home": "Startseite",
"header-generator": "Anfrage generieren",
"header-cdb": "Unternehmensdatenbank",
Expand All @@ -32,11 +36,12 @@
"header-privacy-controls": "Datenschutzeinstellungen",
"header-id-data-controls": "Meine gespeicherten Daten",
"header-open-menu": "Menü öffnen",
"footer-about-us": "Wir sind der Datenanfragen.de e.&nbsp;V., ein gemeinnütziger Verein, der es sich zur Aufgabe gemacht hat, Dir bei der Ausübung Deines Rechts auf Datenschutz zu helfen. <a href='https://www.datenanfragen.de/verein' class='no-link-decoration'>Erfahre mehr.</a>",
"footer-about-us": "Wir sind der Datenanfragen.de e.&nbsp;V., ein gemeinnütziger Verein, der es sich zur Aufgabe gemacht hat, Dir bei der Ausübung Deines Rechts auf Datenschutz zu helfen.",
"footer-learn-more": "Erfahre mehr.",
"home-hero-line-1": "Du hast ein Recht auf",
"home-hero-word": "Datenauskunft",
"home-hero-line-2": "Nutze es.",
"home-main-copy": "Jedes Unternehmen in der EU ist verpflichtet Dir Rechte auf Datenauskunft, -berichtigung, -löschung usw. zu gewähren. Mit Datenanfragen.de wollen wir Dir helfen diese Rechte auszuüben.",
"home-main-copy": "Jedes Unternehmen in der EU ist verpflichtet Dir Rechte auf Datenauskunft, -berichtigung, -löschung usw. zu gewähren. Mit ${site_name} wollen wir Dir helfen diese Rechte auszuüben.",
"home-how-it-works-title": "So geht's",
"home-how-it-works-parameters-title": "Parameter eingeben",
"home-how-it-works-parameters": "Such Dir Unternehmen und Organisationen, bei denen Du anfragen möchtest. Gib ausreichend Daten an, damit dich die Unternehmen auch eindeutig identifizieren können. Damit es für Dich möglichst einfach wird, haben wir die Formulare schon für Dich vorbereitet. Keine Sorge: Alle Daten bleiben auf Deinem Computer und werden dort verarbeitet, sodass sie bei uns gar nicht erst ankommen.",
Expand Down Expand Up @@ -138,7 +143,7 @@
"event-duration": "Dauer",
"event-place-online": "Online",
"video-embed-yourself": "Selbst einbinden",
"footer-tab-website-name": "Datenanfragen.de",
"footer-tab-website-name": "${site_name}",
"footer-request-generator": "Anfrage generieren",
"footer-my-requests": "Meine Anfragen",
"footer-my-saved-data": "Meine gespeicherten Daten",
Expand Down Expand Up @@ -224,9 +229,9 @@
"generate-request": "Eine Anfrage generieren",
"toggle-all": "Alle an-/abwählen",
"ics-summary": "Fällige DSGVO-Anfrage(n)",
"ics-desc": "Du hast über Datenanfragen.de DSGVO-Anfragen bei den unten \n genannten Unternehmen gestellt. Die Frist für diese Anfragen ist \n mittlerweile abgelaufen. Falls Du noch keine Antwort auf eine oder \n mehrere der Anfragen erhalten hast, kannst Du jetzt Mahnungen erstellen: \n https://www.datenanfragen.de/my-requests",
"ics-url": "https://www.datenanfragen.de/my-requests",
"ics-title": "Meine Anfragen bei Datenanfragen.de",
"ics-desc": "Du hast über ${site_name} DSGVO-Anfragen bei den unten \n genannten Unternehmen gestellt. Die Frist für diese Anfragen ist \n mittlerweile abgelaufen. Falls Du noch keine Antwort auf eine oder \n mehrere der Anfragen erhalten hast, kannst Du jetzt Mahnungen erstellen: \n ${base_url}/my-requests",
"ics-url": "${base_url}/my-requests",
"ics-title": "Meine Anfragen bei ${site_name}",
"ics-lang": "DE",
"more": "weitere",
"and": "und",
Expand Down Expand Up @@ -362,7 +367,7 @@
},
"privacy-controls": {
"title": "Datenschutzeinstellungen",
"explanation": "<p>Uns ist Dein Recht auf Datenschutz sehr wichtig, deshalb geben wir uns Mühe, unsere Datenerhebung und -verarbeitung so weit wie möglich zu beschränken. Die allermeisten Funktionen auf Datenanfragen.de werden direkt auf Deinem Computer ausgeführt und die Daten, die Du eingibst, erreichen überhaupt nie unsere Server. Es gibt allerdings auch einige Funktionen, die wir leider nicht anbieten können, ohne einige Daten zu erheben (das trifft aber selbst auf die meisten Funktionen auf dieser Seite <strong>nicht</strong> zu).<br>Hier hast Du die Möglichkeit, selbst zu entscheiden, welche Funktionen Du aktivieren möchtest.</p><p>Wenn Du eine der folgenden Optionen setzt, wird Deine Entscheidung in einem Cookie gespeichert. Sollten wir für eine Option keinen entsprechenden Cookie finden, nutzen wir einen Standardwert, der unserer Meinung nach sinnvoll ist.</p>",
"explanation": "<p>Uns ist Dein Recht auf Datenschutz sehr wichtig, deshalb geben wir uns Mühe, unsere Datenerhebung und -verarbeitung so weit wie möglich zu beschränken. Die allermeisten Funktionen auf ${site_name} werden direkt auf Deinem Computer ausgeführt und die Daten, die Du eingibst, erreichen überhaupt nie unsere Server. Es gibt allerdings auch einige Funktionen, die wir leider nicht anbieten können, ohne einige Daten zu erheben (das trifft aber selbst auf die meisten Funktionen auf dieser Seite <strong>nicht</strong> zu).<br>Hier hast Du die Möglichkeit, selbst zu entscheiden, welche Funktionen Du aktivieren möchtest.</p><p>Wenn Du eine der folgenden Optionen setzt, wird Deine Entscheidung in einem Cookie gespeichert. Sollten wir für eine Option keinen entsprechenden Cookie finden, nutzen wir einen Standardwert, der unserer Meinung nach sinnvoll ist.</p>",
"clear-cookies": "Alle Cookies löschen",
"clear-my-requests": "Alle gespeicherten Anfragen löschen",
"confirm-delete-my-requests": "Du hast die „Meine Anfragen“-Funktion deaktiviert. Willst Du auch alle gespeicherten Anfragen löschen?",
Expand Down
Loading