<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Stefan Josef Wensauer on Medium]]></title>
        <description><![CDATA[Stories by Stefan Josef Wensauer on Medium]]></description>
        <link>https://medium.com/@stefanwensauer?source=rss-71e65c49aaf1------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*IyeWslQY7tCmGviv-dmNwA@2x.jpeg</url>
            <title>Stories by Stefan Josef Wensauer on Medium</title>
            <link>https://medium.com/@stefanwensauer?source=rss-71e65c49aaf1------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Wed, 27 May 2026 00:38:02 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@stefanwensauer/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[Internationalisierung und Lokalisierung mit React-Intl]]></title>
            <link>https://medium.com/@stefanwensauer/internationalisierung-und-lokalisierung-mit-react-intl-b35670a1d08f?source=rss-71e65c49aaf1------2</link>
            <guid isPermaLink="false">https://medium.com/p/b35670a1d08f</guid>
            <category><![CDATA[react-intl]]></category>
            <category><![CDATA[javascript]]></category>
            <category><![CDATA[react]]></category>
            <category><![CDATA[i18n]]></category>
            <category><![CDATA[german]]></category>
            <dc:creator><![CDATA[Stefan Josef Wensauer]]></dc:creator>
            <pubDate>Sun, 18 Aug 2019 17:02:45 GMT</pubDate>
            <atom:updated>2019-08-18T19:17:27.322Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*v-f-kknJCsYT404r" /><figcaption>Photo by <a href="https://unsplash.com/@farzadme?utm_source=medium&amp;utm_medium=referral">Farzad Mohsenvand</a> on <a href="https://unsplash.com?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><h3>Einleitung</h3><p><a href="https://github.com/formatjs/react-intl">React-Intl</a> ist eine quelloffene Bibliothek von Yahoo zur Internationalisierung von Webanwendungen und ein Teil von<strong><em> Format.js</em></strong>, welche weitere Module für die Internationalisierung bereitstellt, unter anderem für Ember und Handlebars. React-Intl greift dabei auf die integrierte Intl API von Javascript zurück und bietet dabei nicht nur die Möglichkeit die Webseite in eine andere Sprache zu übersetzen, sondern auch landestypische Konventionen durch verschiedene Methoden zu berücksichtigen.</p><p>In diesem deutschsprachigen Medium Artikel möchte ich einen übersichtlichen Einstieg durch ein kleines Beispiel geben und zeigen wie einfach die Lokalisierung einer React Webseite sein kann. Bei ausreichend Interesse gehe ich in zukünftigen Artikeln gerne weiter in die Tiefe.</p><h3>Einrichtung</h3><p>Zu Beginn erstellen wir eine React Anwendung dazu initialisieren wir mit</p><pre>npm init react-app my-new-l18n-project</pre><p>das Starter Projekt von React in dem Ordner ‘my-new-l18n-project’.</p><p>Anschließend installieren wir durch</p><pre>npm install --save react-intl</pre><p>die eigentliche Bibliothek.</p><h3>Übersetzungen anlegen</h3><p>Die Übersetzungen für alle verwendeten Sprachen werden als JSON hinterlegt und können über ihre Schlüssel (Keys) referenziert werden.</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/10a78c57f5ba7d980a3a1d040b4e03f4/href">https://medium.com/media/10a78c57f5ba7d980a3a1d040b4e03f4/href</a></iframe><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/62f8c12d5faaf2d4191c67d6dcdcb578/href">https://medium.com/media/62f8c12d5faaf2d4191c67d6dcdcb578/href</a></iframe><h3>Intl Provider</h3><p>Wenn wir das Projekt eingerichtet haben, gehts weiter mit der App.js wo wir als erstes den <em>Intl Provider</em> importieren<em>, </em>welcher als übergeordnete Komponente (HOC = High Order Component) den Context an die Kindelemente durchreicht, in unserem Fall die <em>FirstComponent.</em></p><p>Wir übergeben dem Provider folgende drei Eigenschaften (Properties)</p><pre>&lt;IntlProvider <br> locale={locale} <br> messages={language === &quot;en&quot; ? langEN : langDE}<br> textComponent=&quot;span&quot;&gt; <br> ...<br>&lt;/IntlProvider&gt;</pre><p><strong>locale</strong> gibt an welche Sprache verwendet werden soll. Durch den Default “en” im useState Hook, wird beim initialen Laden der Seite die englische Sprache verwendet. Alternativ könnte auch ein <strong>useIntl</strong> Hook benutzt werden, welcher mit <strong>useIntl().locale</strong> die Browser locale ausliest. Die Übersetzungen werden mit einer Fallentscheidung an <strong>messages</strong> übergeben. Seit React-Intl v3 werden standartmässig die <strong>FormattedMessages</strong> mit einem <strong>React.Fragment </strong>gerendert. In unserem Beispiel möchten wir allerdings aus Styling gründen dafür &lt;span(s)&gt; benutzen. Deswegen geben wir bei<strong> textComponent</strong> “span” an.</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/86cb65af9592f61eab89ec38cdca31fc/href">https://medium.com/media/86cb65af9592f61eab89ec38cdca31fc/href</a></iframe><h3>Aufruf</h3><p>Die “FirstComponent” Komponente rendert anschließend die Übersetzungen (Translations), außerdem besitzt sie einen rudimentären Switch um zwischen den Übersetzungen wechseln zu können. Durch ein <strong>useCallback </strong>wird der Wert an den Parent überreicht, welchen sich diesen in den State speichert und als <strong>locale</strong> benutzt.</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/9c196c2ed6612465b58b7161ad9fa08e/href">https://medium.com/media/9c196c2ed6612465b58b7161ad9fa08e/href</a></iframe><p>Das Ergebnis:</p><figure><img alt="Demo" src="https://cdn-images-1.medium.com/max/800/1*rG-rwZNWAhMa23l3xxvAig.gif" /></figure><p>Github: <a href="https://github.com/sho3it/medium_l18n_tutorial_project">https://github.com/sho3it/medium_l18n_tutorial_project</a></p><p>Vielen Dank…</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=b35670a1d08f" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>