Einrichtung
Ein Tutorial-Projekt einrichten
Einführung
Dies ist ein ausführlicheres Tutorial, wie man ein sehr einfaches NextJS-Projekt mit gt-next
einrichtet.
Wir führen Sie von Anfang bis Ende, einschließlich der Einrichtung des Projekts und der anschließenden Übersetzung.
Im Laufe dieses Tutorials werden wir uns von einfachen zu fortgeschritteneren Konzepten hocharbeiten.
Dieses Tutorial setzt voraus, dass Sie ein allgemeines Verständnis von Typescript, Next.js und React haben.
Hier ist eine Liste von Themen, die wir in diesem Tutorial behandeln werden:
- Ein neues Next.js-Projekt einrichten
- Verwenden der
<T>
Komponente, um eine App zu übersetzen - Verwenden von Variablenkomponenten wie
<Var>
,<Currency>
,<DateTime>
, und<Num>
, um dynamische Inhalte zu übersetzen - Verwenden von Verzweigungskomponenten wie
<Plural>
, und<Branch>
, um bedingte Inhalte zu übersetzen - Verwenden von i18n-Routing in Ihrer App
Unsere App wird eine einfache App sein, die es uns ermöglicht, den Umrechnungskurs zwischen Währungen zu überprüfen.
Wir werden nur Inline-Styling und nur die gt-next
Bibliothek verwenden, um die Dinge so einfach wie möglich zu halten.
Dieses Beispiel basiert auf dem Currency Converter Tutorial auf GeeksforGeeks.
Richten Sie Ihre nächste App ein
Zuerst erstellen wir eine neue NextJS-App. Sie können dies tun, indem Sie den folgenden Befehl ausführen:
npx create-next-app@latest
Dies führt Sie zum Einrichtungsassistenten, wo Sie den Namen Ihrer App und die Vorlage auswählen können, die Sie verwenden möchten.
Für dieses Tutorial verwenden Sie den Namen currencies
und wählen Ja
, wenn Sie gefragt werden, ob Sie TypeScript verwenden möchten.
Navigieren Sie zum Projektverzeichnis und starten wir die App!
cd currencies
npm install
npm run dev
Dies wird die App auf http://localhost:3000
starten.
Lass uns etwas Inhalt hinzufügen!
Jetzt, da wir unsere App eingerichtet haben, lass uns den Inhalt unserer App überschreiben, um einen einfachen Währungsumrechner anzuzeigen.
Kopiere und füge einfach den folgenden Code in die Dateien src/app/page.tsx
und src/app/layout.tsx
ein.
Mach dir vorerst keine allzu großen Sorgen darüber, wie es funktioniert. All dieser Code simuliert nur einen Abruf von einer Währungsumrechnungs-API und zeigt den Wechselkurs zwischen zwei Währungen an.
"use client";
import { useEffect, useState, useCallback } from "react";
// A map between two currencies and their exchange rate (from -> to)
type ExchTable = Record<string, Record<string, number>>;
const EXCH_RATES: ExchTable = {
usd: { usd: 1, inr: 73.5, eur: 0.85, jpy: 105.45, gbp: 0.72 },
inr: { usd: 0.014, inr: 1, eur: 0.012, jpy: 1.46, gbp: 0.01 },
eur: { usd: 1.18, inr: 85.5, eur: 1, jpy: 123.5, gbp: 0.85 },
jpy: { usd: 0.0095, inr: 0.68, eur: 0.0081, jpy: 1, gbp: 0.0068 },
gbp: { usd: 1.39, inr: 99.5, eur: 1.17, jpy: 146.5, gbp: 1 },
};
// some styles for button
const buttonStyle = {
backgroundColor: "#007bff",
color: "white",
border: "none",
padding: "10px 20px",
cursor: "pointer",
borderRadius: "5px",
fontSize: "16px",
margin: "20px",
};
/**
* This function is meant to simulate an api fetch request to get the current exchange.
* Waits for 1 second before returning the exchange rate.
* @returns the exchange rate between two currencies
*/
async function fetchExchangeRate(from: string, to: string): Promise<number> {
await new Promise((resolve) => setTimeout(resolve, 1000));
return EXCH_RATES[from][to];
}
function Page() {
// exch rates
const [info, setInfo] = useState<ExchTable>({});
const options = ["usd", "inr", "eur", "jpy", "gbp"];
// currencies
const [from, setFrom] = useState("usd");
const [to, setTo] = useState("inr");
// values
const [input, setInput] = useState(0);
const [output, setOutput] = useState(0);
// Function to convert the currency
const convert = useCallback(() => {
if (info?.[from]?.[to]) {
const rate = info[from][to];
setOutput(input * rate);
} else {
setOutput(0);
}
}, [info, input, to, from]);
// Calling the api whenever from or to currency changes
useEffect(() => {
// If the exchange rate is already present, then convert
if (info?.[from]?.[to]) {
convert();
return;
}
// Fetch the exchange rate
(async () => {
const response = await fetchExchangeRate(from, to);
// Enter new response without overwriting old info
setInfo((prevInfo) => ({
...prevInfo,
[from]: {
...(prevInfo?.[from] || undefined),
[to]: response,
},
}));
})();
}, [from, to, convert, info]);
// Call convert whenever a user switches the currency
useEffect(() => {
convert();
}, [info, convert]);
// Function to switch between two currency
function flip() {
const temp = from;
setFrom(to);
setTo(temp);
}
return (
<div style={{ margin: "0 auto", width: "50%", textAlign: "center" }}>
<div style={{ margin: "20px 0", paddingBottom: "20px" }}>
<h1 style={{ fontSize: "2.5em", fontWeight: "bold" }}>
Währungsrechner
</h1>
</div>
<div style={{ flex: 2, textAlign: "center", margin: "20px 0" }}>
<h3>Betrag</h3>
<input
type="text"
placeholder="Geben Sie den Betrag ein"
style={{ textAlign: "center" }}
onChange={(e) => {
setInput(Number(e.target.value));
}}
/>
</div>
<div
style={{ display: "flex", justifyContent: "center", margin: "20px 0" }}
>
<div style={{ flex: 1, textAlign: "center" }}>
<label htmlFor="from">
<h3>Von</h3>
</label>
<select
name="from"
id="from"
value={from}
onChange={(e) => setFrom(e.target.value)}
>
{options.map((option) => (
<option key={option} value={option}>
{option.toUpperCase()}
</option>
))}
</select>
</div>
<div style={{ flex: 1, textAlign: "center" }}>
<button
onClick={() => {
flip();
}}
style={buttonStyle}
>
Wechseln
</button>
</div>
<div style={{ flex: 1, textAlign: "center" }}>
<label htmlFor="to">
<h3>Zu</h3>
</label>
<select
name="to"
id="to"
value={to}
onChange={(e) => setTo(e.target.value)}
>
{options.map((option) => (
<option key={option} value={option}>
{option.toUpperCase()}
</option>
))}
</select>
</div>
</div>
<div style={{ margin: "0 auto", width: "50%", textAlign: "center" }}>
<button
onClick={() => {
convert();
}}
style={buttonStyle}
>
Umrechnen
</button>
<h2>Umgerechneter Betrag:</h2>
<p>{input + " " + from + " = " + output.toFixed(2) + " " + to}</p>
</div>
</div>
);
}
export default Page;
import type { Metadata } from "next";
import { Geist, Geist_Mono } from "next/font/google";
import "./globals.css";
const geistSans = Geist({
variable: "--font-geist-sans",
subsets: ["latin"],
});
const geistMono = Geist_Mono({
variable: "--font-geist-mono",
subsets: ["latin"],
});
export const metadata: Metadata = {
title: "Currency Converter",
description: "A simple currency converter",
};
export default function RootLayout({
children,
}: Readonly<{
children: React.ReactNode;
}>) {
return (
<html lang="en">
<body
className={`${geistSans.variable} ${geistMono.variable} antialiased`}
>
{children}
</body>
</html>
);
}
Fazit
Jetzt haben Sie eine normale NextJS-App eingerichtet und bereit zur Übersetzung mit gt-next
.
Wie ist dieser Leitfaden?