Dokumentation / Solid
SolidJS i18n, automatisiert
Lokalisieren Sie eine SolidJS-App: JSX erhält useTranslation() aus einem generierten i18next-Modul, dessen Sprache ein Signal ist, sodass sich der Text bei Sprachwechsel aktualisiert.
Funktionsweise
JSX wird wie React umgeschrieben, mit useTranslation() aus einem generierten Modul. Sein t() liest eine Sprachsignal, sodass JSX aktualisiert wird, wenn setLanguage() aufgerufen wird.
Ein Satz um einen Link bleibt eine Nachricht (Read the <a>terms</a> first), gerendert durch rich() mit den ursprünglichen Elementen.
Vorher und nachher
Die tatsächliche Ausgabe der Engine für diese Datei. Bei einer echten Ausführung benennt das gehostete Modell die Schlüssel anhand des Kontexts.
export function Cart(props) {
return (
<section>
<h2>Hi {props.name}, your cart</h2>
<p>Read the <a href="/terms">terms</a> before paying.</p>
<button title="Pay now">Checkout</button>
</section>
);
}import { useTranslation, rich } from '../i18n';
export function Cart(props) {
const { t } = useTranslation();
return (
<section>
<h2>{t('cart.hi_your_cart', { name: props.name })}</h2>
<p>{rich(t('cart.read_the_terms_before_paying'), { a: (c) => <a href="/terms">{c}</a> })}</p>
<button title={t('cart.pay_now')}>{t('cart.checkout')}</button>
</section>
);
}{
"cart": {
"hi_your_cart": "Hi {{name}}, your cart",
"read_the_terms_before_paying": "Read the <a>terms</a> before paying.",
"pay_now": "Pay now",
"checkout": "Checkout"
}
}Was das Setup hinzufügt
Der erste Durchlauf richtet i18next ein, falls das Projekt es noch nicht hat:
i18nextsrc/i18n.tsmituseTranslation()undsetLanguage()
Ausführen
Die CLI benötigt Node.js 22 oder neuer.
npm install --save-dev localize-dev
npx localize-dev login
# Preview, then write the changes
npx localize-dev run --dry-run -l es,fr,de
npx localize-dev run -l es,fr,de
# Or open a pull request instead
npx localize-dev pr -l es,fr,deOder fügen Sie die GitHub Action und erhalten Sie bei jedem Push einen Pull Request. Probieren Sie es zuerst mit Ihrem eigenen Code im Spielbereich.