From 4a392d0ed13da942bdfb3ddead21b0d3fb964a6c Mon Sep 17 00:00:00 2001
From: FleetAdmiralJakob
Date: Mon, 4 Mar 2024 18:20:41 +0100
Subject: [PATCH] feat: Added the dutch translation
---
apps/web/next.config.mjs | 2 +-
apps/web/src/assets/dutch-flag.png | Bin 0 -> 13269 bytes
apps/web/src/assets/furkan-profile.webp | Bin 0 -> 3160 bytes
apps/web/src/locales/de.ts | 2 +
apps/web/src/locales/en.ts | 2 +
apps/web/src/locales/index.ts | 1 +
apps/web/src/locales/nl.ts | 189 ++++++++++++++++++++++
apps/web/src/pages/contributors/index.tsx | 19 +++
apps/web/src/pages/settings/index.tsx | 20 +++
9 files changed, 234 insertions(+), 1 deletion(-)
create mode 100644 apps/web/src/assets/dutch-flag.png
create mode 100644 apps/web/src/assets/furkan-profile.webp
create mode 100644 apps/web/src/locales/nl.ts
diff --git a/apps/web/next.config.mjs b/apps/web/next.config.mjs
index b81bc506..b87ab930 100644
--- a/apps/web/next.config.mjs
+++ b/apps/web/next.config.mjs
@@ -32,7 +32,7 @@ const config = withMyBundleAnalyzer(withPWA(
transpilePackages: ['@weatherio/api', '@weatherio/ui', '@weatherio/types', '@weatherio/city-data'],
i18n: {
defaultLocale: 'en',
- locales: ['en', 'de']
+ locales: ['en', 'de', 'nl']
}
}))
)
diff --git a/apps/web/src/assets/dutch-flag.png b/apps/web/src/assets/dutch-flag.png
new file mode 100644
index 0000000000000000000000000000000000000000..ec64bf9d13252212e2f95502f8a44fd64e68534d
GIT binary patch
literal 13269
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
ybFf124V5xP+tW&U9= import("./en"),
de: () => import("./de"),
+ nl: () => import("./nl"),
});
diff --git a/apps/web/src/locales/nl.ts b/apps/web/src/locales/nl.ts
new file mode 100644
index 00000000..f27c3d17
--- /dev/null
+++ b/apps/web/src/locales/nl.ts
@@ -0,0 +1,189 @@
+export default {
+ // 404 page translations
+ "404.title": "404 - pagina niet gevonden",
+
+ // common translations
+ "common.title": "Weather.io",
+ "common.location": "Nederland",
+
+ "common.start button": "Vind uw locatie",
+ "common.share button": "Delen",
+ "common.menu home": "Home",
+ "common.menu locations": "Locaties",
+ "common.menu settings": "Instellingen",
+ "common.menu contact": "Contact",
+ "common.footer legal": "Legaal",
+ "common.footer contributors": "Bijdragers",
+
+ "common.search page title": "Zoek - Weather.io",
+
+ "common.miles per hour": "Mijl per uur",
+ "common.kilometers per hour": "Kilometers per uur",
+ "common.knots": "Knopen",
+ "common.meters per second": "Meters per seconden",
+ "common.beaufort": "Beaufort",
+ "common.hectopascals": "Hectopascal",
+
+ "common.share text": "Bekijk deze pagina: ",
+
+ "common.title 404 page": "404: Deze pagina kan niet worden gevonden",
+ "common.title offline page": "Offline",
+
+ // settings page translations
+ "settings.temperature units": "Temperatuur eenheden",
+ "settings.wind speed units": "Windsnelheid eenheden",
+ "settings.language": "Taal",
+
+ "settings.english": "Engels",
+ "settings.german": "Duts",
+ "settings.dutch": "Nederlands",
+
+ // locationsettings page translations
+ "locationsettings.add new location": "Nieuwe locatie toevoegen",
+ "locationsettings.add new location button": "Nieuwe locatie toevoegen",
+ "locationsettings.search input placeholder": "Zoek je locatie",
+
+ "locationsettings.at least one city toast":
+ "Je moet minstens een locatie toevoegen",
+ "locationsettings.switched to city toast": "Geswitched naar locatie!",
+ "locationsettings.added city toast": "Nieuwe locatie toegevoegd!",
+ "locationsettings.city not found toast": "Stad niet gevonden!",
+ "locationsettings.try again toast": "Probeer opnieuw!",
+
+ "locationsettings.my location button": "Kies mijn locatie",
+
+ // offline page translations
+ "offline.title": "Je bent offline",
+ "offline.message": "Controleer uw internetverbinding en probeer het opnieuw.",
+
+ // search page translations
+ "search.search input placeholder": "Zoek uw locatie",
+ "search.continue button": "Verder -->",
+
+ "search.my location button": "Kies mijn locatie",
+
+ // legal page translations
+ "legal.main text":
+ "De inhoud van deze website is zorgvuldig beoordeeld en samengesteld. Wij kunnen echter niet instaan voor de juistheid, volledigheid en actualiteit van de verstrekte informatie. Wij zijn niet aansprakelijk voor schade of verlies voortvloeiend uit het gebruik van deze website. De beheerders van de gelinkte pagina's zijn als enige verantwoordelijk voor de inhoud ervan. Iedere aansprakelijkheid voor externe inhoud wordt uitdrukkelijk uitgesloten.",
+ "legal.germany": "Duitsland",
+ "legal.information disclaimer": "Informatie volgens § 5 TMG",
+
+ // home page translations
+ "home.today": "Vandaag",
+ "home.9 day forecast": "9-daagse voorspelling",
+ "home.precipitation": "Neerslag",
+ "home.feels like": "Voelt als",
+ "home.visibility": "Zichtbaarheid",
+ "home.wind pressure": "Wind en druk",
+ "home.air quality": "Luchtkwaliteit",
+ "home.pressure": "Druk",
+ "home.speed": "Snelheid",
+ "home.moon phase": "Maanfase",
+
+ "home.early morning": "Vroege morgen",
+ "home.morning": "Ochtend",
+ "home.noon": "Middag",
+ "home.afternoon": "Middag",
+ "home.night": "Nacht",
+
+ "home.feels like phrase extremely warm": "The sun is scorching today!",
+ "home.feels like phrase very warm":
+ "De zon probeert waarschijnlijk af te koelen!",
+ "home.feels like phrase warm": "Zelfs ijs vindt warmte te veel!",
+ "home.feels like phrase slightly more warm": "It's a toasty day!",
+ "home.feels like phrase slightly warm": "A perfect day for a picnic!",
+ "home.feels like phrase neutral":
+ "Just the right temperature, not too hot, not too cold.",
+ "home.feels like phrase slightly cold": "A light jacket might be needed.",
+ "home.feels like phrase slightly more cold": "It's a frosty day!",
+ "home.feels like phrase cold":
+ "Pinguïns bestellen warme chocolademelk vanwege de kou!",
+ "home.feels like phrase very cold":
+ "Het ijzige weer van vandaag doet zelfs sneeuwmannen huiveren!",
+ "home.feels like phrase extremely cold":
+ "It's so cold, even the polar bears are staying inside!",
+
+ "home.air quality text very poor": "Erg arm",
+ "home.air quality text poor": "Arm",
+ "home.air quality text fair": "Eerlijk",
+ "home.air quality text moderate": "Gematigd",
+ "home.air quality text good": "Goed",
+ "home.air quality text excellent": "Uitstekend",
+
+ "home.sunset": "Zonsondergang",
+ "home.sunrise": "Zonsopgang",
+
+ "home.moonset": "Maanondergang",
+ "home.moonrise": "Maanopgang",
+
+ "home.weather state stormy": "Stormachtig",
+ "home.weather state snowy": "Sneeuwachtig",
+ "home.weather state rainy": "Regenachtig",
+ "home.weather state very cloudy": "Zeer bewolkt",
+ "home.weather state cloudy": "Bewolkt",
+ "home.weather state windy": "Bewolkt met wind",
+ "home.weather state sunny": "Zonnig",
+
+ "home.this hour": "Deze uur",
+ "home.early hour time ending": ":00",
+ "home.late hour time ending": ":00",
+
+ "home.9 day forecast card content":
+ 'De voorspelling voor de komende 9 dagen.
Het temperatures zijn de gemiddelde temperaturen voor de dag. Eén voor de dag en één voor de nacht.',
+
+ "home.precipitation card title": "Huidige neerslag",
+
+ "home.feels like card content":
+ "De gevoelstemperatuur is de temperatuur die je voelt als je buiten bent.
Deze wordt beïnvloed door de temperatuur, vochtigheid en wind.",
+
+ "home.visibility card title": "Huidige zichtbaarheid",
+
+ "home.wind pressure card title": "Huidige wind en druk",
+ "home.wind pressure card content":
+ "Atmosferische druk op zeeniveau.
Op zeeniveau is atmosferische druk de kracht die wordt uitgeoefend door het gewicht van de lucht erboven en is gemiddeld 1013,25 hPa.",
+
+ "home.not available": "Niet beschikbaar",
+
+ "home.moon phase card title": "Huidige maanfase",
+ "home.moon phase card content":
+ "De maanfase is de vorm van het direct door de zon beschenen deel van de maan gezien vanaf de aarde.",
+
+ "home.moon phase new moon": "Nieuwe maan",
+ "home.moon phase waxing crescent": "Wassende halve maan",
+ "home.moon phase first quarter": "Eerste kwartier",
+ "home.moon phase waxing gibbous": "Wassende volle maan",
+ "home.moon phase full moon": "Volle maan",
+ "home.moon phase waning gibbous": "Afnemende maan",
+ "home.moon phase last quarter": "Laatste kwartier",
+ "home.moon phase waning crescent": "Afnemende halve maan",
+
+ "home.more information": "Meer Informatie",
+ "home.less information": "Minder Informatie",
+
+ "home.sun hours": "Zonuren",
+
+ "home.from": "Van",
+
+ // contact page translations
+ "contact.send button": "Versturen",
+ "contact.sent button": "Verstuurd",
+ "contact.first name": "Voornaam",
+ "contact.last name": "Achternaam",
+ "contact.email": "Email",
+ "contact.message": "Bericht",
+
+ "contact.sent toast": "Bericht Verstuurd!",
+ "contact.sending email loading toast": "Email verzenden...",
+
+ "contact.invalid email": "Ongeldig e-mailadres",
+ "contact.at least 2 characters": "Dit veld moet minimaal 2 tekens bevatten",
+ "contact.at least 10 characters": "Dit veld moet minimaal 10 tekens bevatten",
+
+ // contributors page translations
+ "contributors.made with love text":
+ 'Gemaakt met ♥️ bij',
+ "contributors.founder": "Oprichter",
+ "contributors.engineer": "Ingenieur",
+ "contributors.designer": "Ontwerper",
+ "contributors.translator": "Vertaler",
+} as const;
diff --git a/apps/web/src/pages/contributors/index.tsx b/apps/web/src/pages/contributors/index.tsx
index 49bb0853..fd981650 100644
--- a/apps/web/src/pages/contributors/index.tsx
+++ b/apps/web/src/pages/contributors/index.tsx
@@ -6,6 +6,7 @@ import ReactHtmlParser from "react-html-parser";
import iqbalProfile from "~/assets/bal-profile.jpg";
import dicsiluksProfile from "~/assets/dicsiluks-profile.webp";
import fabiusProfile from "~/assets/fabius-profile.jpg";
+import furkanProfile from "~/assets/furkan-profile.webp";
import jakeProfile from "~/assets/jake-profile.png";
import jakobProfile from "~/assets/jakob-profile.webp";
import Layout from "~/components/Layout";
@@ -111,6 +112,24 @@ const Contributors = () => {
{translationContributors("engineer")}
+
+
+
+
+
+ {translationContributors("designer")} &{" "}
+ {translationContributors("engineer")} &{" "}
+ {translationContributors("translator")}
+
+
diff --git a/apps/web/src/pages/settings/index.tsx b/apps/web/src/pages/settings/index.tsx
index 1a72c1b9..5020cc2b 100644
--- a/apps/web/src/pages/settings/index.tsx
+++ b/apps/web/src/pages/settings/index.tsx
@@ -4,6 +4,7 @@ import { observer } from "@legendapp/state/react";
import { RxCheck } from "react-icons/rx";
import type { TemperatureUnitType, WindSpeedUnitType } from "~/states";
+import dutchFlag from "~/assets/dutch-flag.png";
import germanFlag from "~/assets/german-flag.png";
import usaFlag from "~/assets/usa-flag.png";
import Layout from "~/components/Layout";
@@ -179,6 +180,25 @@ const Settings = observer(() => {
)}
+