{"id":133285,"date":"2019-04-17T10:00:28","date_gmt":"2019-04-17T08:00:28","guid":{"rendered":"https:\/\/phrase.com\/blog\/posts\/ios-app-lokalisierung-mit-phrase-strings\/"},"modified":"2026-03-06T17:22:23","modified_gmt":"2026-03-06T16:22:23","slug":"ios-app-localization-phrase","status":"publish","type":"post","link":"https:\/\/phrase.com\/de\/blog\/posts\/ios-app-localization-phrase\/","title":{"rendered":"iOS Over-the-Air \u00dcbersetzung mit Phrase Strings"},"content":{"rendered":"<p>In gro\u00dfem Ma\u00dfstab kann <a href=\"https:\/\/phrase.com\/blog\/posts\/ios-tutorial-internationalization-localization\/\">iOS-Lokalisierung<\/a> eine ziemliche Herausforderung darstellen. \u00dcbersetzende besch\u00e4ftigen sich nicht gern mit <code>.strings<\/code> Dateien, und wir Entwickler wollen uns nicht mit Uploads und Downloads herumschlagen, die wir manuell in unseren Projekten zusammenf\u00fchren m\u00fcssen.<\/p>\n<p>Hier kommt <a href=\"https:\/\/phrase.com\/de\/platform\/strings\/\">Phrase Strings<\/a> ins Spiel \u2013 die Software-Lokalisierungsplattform innerhalb der Phrase Localization Platform. Als professionelles Lokalisierungs-Tool f\u00fcr Entwickler*innen und \u00dcbersetzende kann Phrase Strings die schwere Arbeit der Lokalisierung \u00fcbernehmen und uns mehr Zeit schenken, um uns auf die Gesch\u00e4ftslogik unserer App zu konzentrieren. Im Folgenden zeigen wir dir, wie wir unsere iOS-Apps  Over-the-Air mit Phrase Strings \u00fcbersetzen k\u00f6nnen.<\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_81 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Overview<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/phrase.com\/de\/blog\/posts\/ios-app-localization-phrase\/#unsere-app\" >Unsere App<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/phrase.com\/de\/blog\/posts\/ios-app-localization-phrase\/#einrichtung\" >Einrichtung<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/phrase.com\/de\/blog\/posts\/ios-app-localization-phrase\/#projekt-zu-phrase-hinzufuegen\" >Projekt zu Phrase hinzuf\u00fcgen<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/phrase.com\/de\/blog\/posts\/ios-app-localization-phrase\/#installation-von-phrase-cli\" >Installation von Phrase CLI<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/phrase.com\/de\/blog\/posts\/ios-app-localization-phrase\/#sprachen-hinzufuegen\" >Sprachen hinzuf\u00fcgen<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/phrase.com\/de\/blog\/posts\/ios-app-localization-phrase\/#initialisierung-unseres-client-projekts\" >Initialisierung unseres Client-Projekts<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/phrase.com\/de\/blog\/posts\/ios-app-localization-phrase\/#unsere-erste-lokalisierung-in-xcode-hinzufuegen\" >Unsere erste Lokalisierung in XCode hinzuf\u00fcgen<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/phrase.com\/de\/blog\/posts\/ios-app-localization-phrase\/#ios-app-lokalisierung-mit-phrase-im-einsatz\" >iOS-App-Lokalisierung mit Phrase im Einsatz<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/phrase.com\/de\/blog\/posts\/ios-app-localization-phrase\/#unerwuenschte-string-keys-entfernen\" >Unerw\u00fcnschte String-Keys entfernen<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/phrase.com\/de\/blog\/posts\/ios-app-localization-phrase\/#uebersetzen-der-uebersetzungseditor\" >\u00dcbersetzen: Der \u00dcbersetzungseditor<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/phrase.com\/de\/blog\/posts\/ios-app-localization-phrase\/#uebersetzungen-herunterladen-abrufen\" >\u00dcbersetzungen herunterladen (abrufen)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/phrase.com\/de\/blog\/posts\/ios-app-localization-phrase\/#code-uebersetzen-eine-localizablestrings-datei-hinzufuegen\" >Code \u00fcbersetzen: eine Localizable.strings-Datei hinzuf\u00fcgen<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/phrase.com\/de\/blog\/posts\/ios-app-localization-phrase\/#cest-fini\" >C&#8217;est fini<\/a><\/li><\/ul><\/nav><\/div>\n<h2 id=\"toc_1\"><span class=\"ez-toc-section\" id=\"unsere-app\"><\/span>Unsere App<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Wir haben eine einfache Demo-App, an der wir in diesem Artikel gemeinsam arbeiten.<\/p>\n<p style=\"text-align: center\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-6666 size-full\" src=\"https:\/\/phrase.com\/wp-content\/uploads\/2019\/05\/iosph01-sim-en-app-two-screens.png\" alt=\"Demo App | Phrase\" width=\"832\" height=\"749\" \/><em>Short Circuit, eine kuratierte Liste elektronischer Musik<\/em><\/p>\n<p>Unsere preisgekr\u00f6nte Zwei-Bildschirm-App, Short Circuit, listet elektronische Musiktracks zusammen mit ihren K\u00fcnstlern und Ver\u00f6ffentlichungsdaten auf. Um die Trackliste anzuzeigen, benutzen wir <code>UITableView<\/code> und verbinden es \u00fcber einen <code>UIViewController<\/code> mit einem festcodierten Array von Tracks. Wenn du auf eine Track-Zeile tippst, \u00f6ffnet sich ein Detailbildschirm, der die Track-Informationen anzeigt. Die App ist wirklich ganz einfach, und wir werden sie hier als Testumgebung f\u00fcr unsere Lokalisierungsarbeit mit Phrase verwenden.<\/p>\n<p><em>Hinweis \u00bb<\/em> Hol dir das <a href=\"https:\/\/github.com\/PhraseApp-Blog\/ios-phraseapp-starter\">Starter-Projekt<\/a> f\u00fcr unsere App auf GitHub. Das abgeschlossene Projekt ist am Ende des Artikels verlinkt.<\/p>\n<h2 id=\"toc_2\"><span class=\"ez-toc-section\" id=\"einrichtung\"><\/span>Einrichtung<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Als ersten Schritt f\u00fcgen wir ein neues Projekt zu Phrase hinzu, installieren Phrase CLI auf unserem Entwicklungsrechner und f\u00fcgen unsere ersten Sprachversionen hinzu.<\/p>\n<p><em>Hinweis \u00bb<\/em> Bevor du ein Projekt hinzuf\u00fcgst, musst du <a href=\"https:\/\/eu.phrase.com\/idm-ui\/signup\">eine Phrase-Organisation erstellen<\/a>, wenn du noch keine hast. Eine Testversion ist 14 Tage lang kostenlos, und es dauert nur ein paar Minuten, um sie einzurichten.<\/p>\n<h3 id=\"toc_3\"><span class=\"ez-toc-section\" id=\"projekt-zu-phrase-hinzufuegen\"><\/span>Projekt zu Phrase hinzuf\u00fcgen<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Wenn wir uns bei Phrase anmelden, gelangen wir zu unserem Tab <i>Projekte<\/i>. F\u00fcge hier ein neues Projekt hinzu, und zwar mit dem Button <em>Projekt hinzuf\u00fcgen<\/em> oben rechts auf der Seite.<\/p>\n<p style=\"text-align: center\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-6667 size-large\" src=\"https:\/\/phrase.com\/wp-content\/uploads\/2019\/05\/iosph01-ph-add-project-button-1024x181.png\" alt=\"Ein neues Projekt in Phrase hinzuf\u00fcgen | Phrase\" width=\"1024\" height=\"181\" \/><em>Klicke<\/em> zum Start auf <em>Projekt hinzuf\u00fcgen<\/em>.<\/p>\n<p>Dies \u00f6ffnet den <em>Projekt hinzuf\u00fcgen<\/em>-Dialog, der es uns erm\u00f6glicht, die Anfangseinstellungen unseres neuen Projekts schnell zu konfigurieren.<\/p>\n<p style=\"text-align: center\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-6668 size-large\" src=\"https:\/\/phrase.com\/wp-content\/uploads\/2019\/05\/iosph01-ph-add-project-modal-969x1024.png\" alt=\"Projektmen\u00fc hinzuf\u00fcgen | Phrase\" width=\"969\" height=\"1024\" \/><em>Wir k\u00f6nnen unserem Projekt jeden Namen geben, den wir wollen<\/em><\/p>\n<p>Wir m\u00fcssen unserem Projekt einen Namen geben, und wir k\u00f6nnen jeden Namen w\u00e4hlen, den wir wollen. Wir verwenden <code>.strings<\/code>-Dateien f\u00fcr den Gro\u00dfteil unserer Lokalisierung, also w\u00e4hlen wir diese Option als das <em>Hauptformat<\/em> f\u00fcr unser Projekt. Und nat\u00fcrlich w\u00e4hlen wir <em>iOS<\/em> als <em>Haupttechnologie<\/em> des Projekts. Das gen\u00fcgt f\u00fcr den Anfang. Klick auf die Schaltfl\u00e4che <em>Speichern<\/em>, um das Projekt zu erstellen.<\/p>\n<p><em>Hinweis \u00bb<\/em> Du kannst jede dieser Projekteinstellungen jederzeit \u00e4ndern, und zwar \u00fcber das Dialogfeld <em>Projekteinstellungen<\/em>.<\/p>\n<h3 id=\"toc_4\"><span class=\"ez-toc-section\" id=\"installation-von-phrase-cli\"><\/span>Installation von Phrase CLI<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Um unsere \u00dcbersetzungen mit Phrase synchronisieren zu k\u00f6nnen, brauchst du Phrase CLI. Wenn wir <a href=\"https:\/\/brew.sh\/\">Homebrew<\/a> auf unserem Mac haben, ist das ziemlich einfach. Wir m\u00fcssen nur zwei Befehle von der Kommandozeile aus ausf\u00fchren:<\/p>\n<div>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\"><code class=\"language-none\">$ brew tap phrase\/brewed<\/code><\/pre>\n<\/div>\n<p><code>tap<\/code>ping verschafft uns Zugriff auf das Phrase Homebrew-Repository. Sobald das erledigt ist, k\u00f6nnen wir ausf\u00fchren.<\/p>\n<div>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\"><code class=\"language-none\">$ brew install phraseapp<\/code><\/pre>\n<\/div>\n<p>Et voil\u00e0. Das sollte es gewesen sein. Um die Installation zu \u00fcberpr\u00fcfen, k\u00f6nnen wir <code>$ phraseapp<\/code> in der Befehlszeile ausf\u00fchren. Wenn alles gut gelaufen ist, sollten wir eine Liste aller verf\u00fcgbaren Befehle sehen, die Phrase CLI bietet.<\/p>\n<p><em>Hinweis \u00bb<\/em> Wenn du Homebrew nicht verwenden m\u00f6chtest, schau dir <a href=\"https:\/\/support.phrase.com\/hc\/de\/articles\/5784093863964-CLI-Installation-Strings\"><span style=\"font-weight: 400\">den vollst\u00e4ndigen CLI-Installationsleitfaden<\/span><\/a> f\u00fcr andere Installationsoptionen an.<\/p>\n<h3 id=\"toc_5\"><span class=\"ez-toc-section\" id=\"sprachen-hinzufuegen\"><\/span>Sprachen hinzuf\u00fcgen<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Mit unserem erstellten Projekt k\u00f6nnen wir den Tab <em>Sprachen<\/em> \u00f6ffnen, um die unterst\u00fctzten Sprachen unserer App hinzuzuf\u00fcgen. Nat\u00fcrlich lassen sich Sprachen in unserem Projekt jederzeit hinzuf\u00fcgen oder l\u00f6schen.<\/p>\n<p style=\"text-align: center\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-6669 size-large\" src=\"https:\/\/phrase.com\/wp-content\/uploads\/2019\/05\/iosph01-ph-locales-page-tab-1024x172.png\" alt=\"Sprachen-Tab in Phrase | Phrase\" width=\"1024\" height=\"172\" \/><em>Lass uns diese Sprachen hinzuf\u00fcgen<\/em><\/p>\n<p>Im <em>Sprachen<\/em>-Tab solltest du einen Button namens <em>F\u00fcge die erste Sprache hinzu<\/em> sehen. Lass uns auf diese Taste klicken. Daraufhin \u00f6ffnet sich der Dialog <em>Sprache hinzuf\u00fcgen<\/em>.<\/p>\n<p style=\"text-align: center\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-6670 size-large\" src=\"https:\/\/phrase.com\/wp-content\/uploads\/2019\/05\/iosph01-ph-add-locale-1024x416.png\" alt=\"Dialog zum Hinzuf\u00fcgen einer Sprache | Phrase\" width=\"1024\" height=\"416\" \/><br \/>\n<em>Einfacher geht&#8217;s nicht<\/em><\/p>\n<p>Wir geben unserer Sprache einfach einen Namen und w\u00e4hlen die Zielsprache aus, die wir anvisieren. In meinem Fall f\u00fcge ich Englisch hinzu. Wir k\u00f6nnen dann die Sprache speichern und den Prozess f\u00fcr alle anderen Sprachen wiederholen, die wir anfangs in unserer App unterst\u00fctzen m\u00f6chten.<\/p>\n<h3 id=\"toc_6\"><span class=\"ez-toc-section\" id=\"initialisierung-unseres-client-projekts\"><\/span>Initialisierung unseres Client-Projekts<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Jetzt schauen wir uns unseren Client an, also unseren Entwicklungsrechner. Um unsere lokale Phrase-Umgebung f\u00fcr unser Projekt zu initialisieren, ben\u00f6tigen wir ein API-Zugriffstoken. Dazu m\u00fcssen wir au\u00dferdem eine lokale <code>.phraseapp.yml<\/code>-Datei generieren.<\/p>\n<h4 id=\"toc_7\">Ein API-Zugriffstoken erhalten<\/h4>\n<p>Um ein API-Zugriffstoken zu erstellen, k\u00f6nnen wir uns bei Phrase anmelden und zu unserer Profilseite gehen. Der Link zu unserer Profilseite befindet sich unter unserem User-Namen in der Navigationsleiste.<\/p>\n<p style=\"text-align: center\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-6671 size-large\" src=\"https:\/\/phrase.com\/wp-content\/uploads\/2019\/05\/iosph01-ph-link-to-profile-1024x303.png\" alt=\"Geh zu unserer Profilseite | Phrase\" width=\"1024\" height=\"303\" \/><br \/>\n<em>&#8222;Fartknocker2022&#8220; ist kein angemessener Profilname<\/em><\/p>\n<p>Sobald wir auf unserer Profilseite sind, k\u00f6nnen wir \u00fcber den Link in der oberen Tab-Leiste zum Tab <em>Zugriffstoken<\/em> gehen.<\/p>\n<p style=\"text-align: center\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-6672 size-large\" src=\"https:\/\/phrase.com\/wp-content\/uploads\/2019\/05\/iosph01-ph-generate-token-button-1024x128.png\" alt=\"Tab-Leisten-Element Zugriffstoken | Phrase\" width=\"1024\" height=\"128\" \/><em>Finde das<\/em> Tab-Leisten-Element <em>Zugriffstoken<\/em><\/p>\n<p>Im Tab <em>Zugriffstoken<\/em> klickst du auf die Schaltfl\u00e4che <em>Token generieren<\/em>. Dies \u00f6ffnet den Dialog <em>Token generieren<\/em>.<\/p>\n<p style=\"text-align: center\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-6673 size-large\" src=\"https:\/\/phrase.com\/wp-content\/uploads\/2019\/05\/iosph01-ph-generate-token-1024x615.png\" alt=\"Dialog Token generieren | Phrase\" width=\"1024\" height=\"615\" \/><em>Nur ein <\/em> Hinweis<em>und schon kannst du loslegen.<\/em><\/p>\n<p>Wir brauchen f\u00fcr unser Projekt sowohl Lese- als auch Schreibzugriff, da wir \u00dcbersetzungsdateien sowohl herunterladen als auch hochladen. Wir k\u00f6nnen diese Option also so belassen, wie sie ist. Wir k\u00f6nnen im <em>Notiz<\/em>-Feld eine beliebige identifizierende Notiz f\u00fcr uns selbst eingeben. Dies dient als Erinnerung an den Grund, warum wir dieses Token erstellt haben. Klick auf <em>Speichern<\/em>, um das Token zu generieren. Du solltest dann das neue Token zusammen mit einer Schaltfl\u00e4che sehen, mit der du es in deine Zwischenablage kopieren kannst.<\/p>\n<p><em>Hinweis \u00bb<\/em> Stelle sicher, dass du das Token kopierst und an einem sicheren Ort aufbewahrst, da es dir nur einmal in der Phrase-Konsole angezeigt wird.<\/p>\n<p style=\"text-align: center\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-6675 size-full\" src=\"https:\/\/phrase.com\/wp-content\/uploads\/2019\/05\/iosph01-ph-access-token-copy.png\" alt=\"Geheimes Token f\u00fcr das Demo-App-Projekt | Phrase\" width=\"658\" height=\"200\" \/><br \/>\n<em>Hol dir dein Token, solange es noch hei\u00df ist<\/em><\/p>\n<h4 id=\"toc_8\">Erstellung unserer Client-Konfiguration<\/h4>\n<p>Jetzt, da wir unser Zugriffstoken haben, k\u00f6nnen wir unser Projekt auf unserem Entwicklungsrechner initialisieren. Vom Projektverzeichnis aus k\u00f6nnen wir den folgenden Befehl in der Befehlszeile ausf\u00fchren:<\/p>\n<div>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\"><code class=\"language-none\">$ phraseapp init<\/code><\/pre>\n<\/div>\n<p>F\u00fchre diesen Befehl aus, und der Phrase-Papagei fotobombt dein Terminal. Wir werden nach unserem API-Zugangstoken gefragt und wir k\u00f6nnen das zuvor generierte Token einf\u00fcgen.<\/p>\n<p>Uns wird dann eine Liste unserer Phrase-Projekte angezeigt, und wir k\u00f6nnen eines ausw\u00e4hlen, um es mit unserem lokalen Projekt zu verkn\u00fcpfen.<br \/>\nDanach werden wir aufgefordert, unser Standard-Lokalisierungsformat auszuw\u00e4hlen. Wir haben das Format festgelegt, als wir unser Projekt in der Phrase-Webkonsole erstellt haben, also k\u00f6nnen wir einfach <em>Enter<\/em> dr\u00fccken, um das gleiche Format zu verwenden.<br \/>\nGib dann den Dateipfad zu deiner Datei <code>Localizable.strings<\/code> an. Wir haben diese Datei noch nicht erstellt, also kannst du <em>Enter<\/em> dr\u00fccken, um vorerst bei der Standardpfadvorlage zu bleiben. Wir bearbeiten diesen Wert sp\u00e4ter.<br \/>\nDie Datei <code>.phraseapp.yml<\/code> wird jetzt generiert. Schlie\u00dflich wirst du gefragt, ob du einen ersten Upload deiner \u00dcbersetzungsdateien machen oder hochladen willst. Dr\u00fcck <em>n<\/em>, um diesen Schritt vorerst zu \u00fcberspringen.<\/p>\n<p><em>Hinweis \u00bb<\/em> Es k\u00f6nnte eine gute Idee sein, unsere <code>.phraseapp.yml<\/code> unter Versionskontrolle zu stellen. Das wird es anderen Entwicklern im Projekt erleichtern, \u00dcbersetzungen zu synchronisieren.<\/p>\n<h3 id=\"toc_9\"><span class=\"ez-toc-section\" id=\"unsere-erste-lokalisierung-in-xcode-hinzufuegen\"><\/span>Unsere erste Lokalisierung in XCode hinzuf\u00fcgen<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Nachdem die Initialisierung von Phrase abgeschlossen ist, kannst du dich jetzt auf deine iOS-App konzentrieren. Um sie lokalisierbar zu machen, m\u00fcssen wir mindestens eine Sprache in XCode hinzuf\u00fcgen. Wir tun dies, indem wir unser Projekt im Navigator ausw\u00e4hlen, das Projekt selbst (nicht ein spezifisches Ziel) in der Zielliste ausw\u00e4hlen und dann auf die Schaltfl\u00e4che \u2795  unter <em>Lokalisierungen<\/em> klicken. Ich w\u00e4hle hier Arabisch aus. Du kannst jede gew\u00fcnschte Sprache hinzuf\u00fcgen.<\/p>\n<p style=\"text-align: center\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-6677 size-large\" src=\"https:\/\/phrase.com\/wp-content\/uploads\/2019\/05\/iosph01-xc-add-language-1024x956.png\" alt=\"Eine neue Sprache zum Projekt hinzuf\u00fcgen | Phrase\" width=\"1024\" height=\"956\" \/><br \/>\n<em>Klick \u2795 f\u00fcr \ud83c\udf0d<\/em><\/p>\n<p>Ein Dialog \u00f6ffnet sich, in dem wir die Dateien und die Referenzsprache f\u00fcr die Storyboard-\u00dcbersetzungen unserer neuen Sprache ausw\u00e4hlen k\u00f6nnen. Wir k\u00f6nnen <em>Basis<\/em> als Referenzsprache ausgew\u00e4hlt lassen. Lass uns <em>Lokalisierbare Strings<\/em> f\u00fcr unsere Dateitypen ausw\u00e4hlen. Dies wird dem Format entsprechen, das wir f\u00fcr unser Projekt in Phrase festgelegt haben.<\/p>\n<h4 id=\"toc_10\">Dateien in der Ausgangssprache hinzuf\u00fcgen<\/h4>\n<p>Standardm\u00e4\u00dfig verwendet XCode die Strings in unseren <code>Main.storyboard<\/code> und <code>LaunchScreen.storyboard<\/code> als seine Quell\u00fcbersetzungen. In meinem Fall sind diese auf Englisch. Es ist gut, diese Strings in ihrer eigenen <code>Localizable.strings<\/code>-Datei zu sprichern, damit wir sie als Quell\u00fcbersetzungen in Phrase verwenden k\u00f6nnen. W\u00e4hle unsere <code>Main.storyboard<\/code>-Datei aus und aktiviere das Kontrollk\u00e4stchen <em>Englisch<\/em> im Dateiinspektor unter <em>Lokalisierungen<\/em>.<\/p>\n<p style=\"text-align: center\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-6678 size-full\" src=\"https:\/\/phrase.com\/wp-content\/uploads\/2019\/05\/iosph01-xc-add-english.png\" alt=\"Unsere Quell\u00fcbersetzungen | Phrase\" width=\"626\" height=\"148\" \/><br \/>\n<em>Wir wollen unsere Quell\u00fcbersetzungen in Phrase<\/em><\/p>\n<h4 id=\"toc_11\">Client-Konfiguration wird aktualisiert<\/h4>\n<p>Jetzt, da du deine ersten \u00dcbersetzungsdateien hast, kannst du deine <code>.phraseapp.yml<\/code> aktualisieren und die Pfade hinzuf\u00fcgen. So kannst du sie \u00fcber die CLI mit Phrase synchronisieren. Sobald wir unsere Quell- und Zielpfade hinzugef\u00fcgt haben, wird unsere <code>.phraseapp.yml<\/code> ungef\u00e4hr so aussehen.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"yaml\" data-enlighter-group=\"1\" data-enlighter-title=\".phraseapp.yml\">phraseapp:\n  access_token: &lt;your_access_token&gt;\n  project_id: &lt;your_project_id&gt;\n  push:\n    sources:\n    - file: .\/Views\/en.lproj\/Main.strings\n      params:\n        file_format: strings\n  pull:\n    targets:\n    - file: .\/Views\/ar.lproj\/Main.strings\n      params:\n        file_format: strings<\/pre>\n<p>Dies teilt dem Phrase-Client mit, welche Dateien hochgeladen werden, wenn wir <code>push<\/code> (unsere Ausgangssprachen-Dateien) nutzen, und welche heruntergeladen werden, wenn wir <code>pull<\/code> (unsere Zielsprachen-Dateien) nutzen. \u201ePushing\u201c ist im Grunde hochladen, und \u201ePulling\u201c ist herunterladen.<br \/>\nUm jedoch in der Lage zu sein, unsere \u00dcbersetzungen zu Phrase zu pushen und zu pullen, m\u00fcssen wir Sprach-IDs zu unserer <code>.phraseapp.yml<\/code>-Datei hinzuf\u00fcgen. Wir k\u00f6nnen diese von der Phrase Webkonsole erhalten. Wenn wir zum Tab <em>Sprachen<\/em> in der Konsole navigieren, finden wir ein Zahnrad-Symbol neben jeder Sprache.<\/p>\n<p style=\"text-align: center\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-6679 size-large\" src=\"https:\/\/phrase.com\/wp-content\/uploads\/2019\/05\/iosph01-ph-locale-list-gear-icon-1024x186.png\" alt=\"Sprachen-Tab-Zahnrad-Symbole | Phrase\" width=\"1024\" height=\"186\" \/><br \/>\n<em>Hab keine Angst, klick einfach aufs Zahnrad<\/em><\/p>\n<p>Ein Klick auf dieses Symbol \u00f6ffnet den Dialog <em>Sprache bearbeiten<\/em>. Von dort aus k\u00f6nnen wir zum Tab <em>API<\/em> navigieren, um die ID der Sprache zu erhalten.<\/p>\n<p style=\"text-align: center\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-6681 size-large\" src=\"https:\/\/phrase.com\/wp-content\/uploads\/2019\/05\/iosph01-ph-locale-id-1-1024x338.png\" alt=\"Sprachen-ID im API-Men\u00fc | Phrase\" width=\"1024\" height=\"338\" \/><br \/>\n<em>Da ist sie, die ID<\/em><\/p>\n<p>Mit unseren Sprachen-IDs in der Hand k\u00f6nnen wir unsere <code>.phraseapp.yml<\/code>-Datei aktualisieren.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"yaml\" data-enlighter-group=\"2\" data-enlighter-title=\".phraseapp.yml \">phraseapp:\n  access_token: &lt;your_access_token&gt;\n  project_id: &lt;your_project_id&gt;\n  push:\n    sources:\n    - file: .\/Views\/en.lproj\/Main.strings\n      params:\n        locale_id: fd935424a9ef2dfd054d982ccb7a8064\n        file_format: strings\n  pull:\n    targets:\n    - file: .\/Views\/ar.lproj\/Main.strings\n      params:\n        locale_id: 9c380148d7c1827b6c1db12f0b1a9da8\n        file_format: strings<\/pre>\n<p>Alles klar, jetzt kannst du deinen ersten <code>push<\/code> machen. Dies wird unsere Quelldatei zu Phrase hochladen und es uns erm\u00f6glichen, die Ziel\u00fcbersetzungen zu erstellen. Lass uns den folgenden Befehl im gleichen Verzeichnis ausf\u00fchren, das unsere <code>.phraseapp.yml<\/code> enth\u00e4lt, auf der Kommandozeile:<\/p>\n<div>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\"><code class=\"language-none\">$ phraseapp push<\/code><\/pre>\n<\/div>\n<p>Wenn alles gut gelaufen ist, sollten wir eine Ausgabe wie die folgende sehen:<\/p>\n<div>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\"><code class=\"language-none\">Views\/en.lproj\/Main.strings wird hochgeladen ... abgeschlossen!\nPr\u00fcf die Upload-ID: fa27e27bd0f4256295d49af64efd8069, Dateiname: Main.strings f\u00fcr Informationen \u00fcber Verarbeitungsergebnisse.<\/code><\/pre>\n<\/div>\n<p>Und wenn du die Phrase-Webkonsole besuchst, solltest du sehen, dass die Liste der Sprachen jetzt anzeigt, dass es ausstehende \u00dcbersetzungen gibt.<\/p>\n<p style=\"text-align: center\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-6682 size-large\" src=\"https:\/\/phrase.com\/wp-content\/uploads\/2019\/05\/iosph01-ph-after-successful-push-1024x182.png\" alt=\"\u00dcbersetzungsstatus in Phrase | Phrase\" width=\"1024\" height=\"182\" \/><br \/>\n<em>Wir haben einiges zu \u00fcbersetzen<\/em><\/p>\n<p><em>Hinweis \u00bb<\/em> Du kannst deine Dateien auch \u00fcber die Webkonsole zu Phrase hochladen, und es gibt einige Sonderf\u00e4lle, auf die du beim Hochladen achten solltest.<\/p>\n<p>Super, gro\u00dfartig! Wir haben jetzt unser Projekt mit Phrase synchronisiert. Lass uns mit dem \u00dcbersetzen loslegen.<\/p>\n<h2 id=\"toc_12\"><span class=\"ez-toc-section\" id=\"ios-app-lokalisierung-mit-phrase-im-einsatz\"><\/span>iOS-App-Lokalisierung mit Phrase im Einsatz<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Bisher haben wir unsere <code>Main.storyboard<\/code>-Label hochgeladen. Jetzt sind sie bereit, damit du sie in der Phrase Webkonsole \u00fcbersetzen kannst. Lass uns die Konsole \u00f6ffnen und zu <em>{Projektname} &gt; Sprachen &gt; ar<\/em> navigieren, um unsere ausstehenden arabischen (Ziel-)\u00dcbersetzungen zu sehen.<br \/>\nUnsere \u00dcbersetzungs-Keys sind in der linken Seitenleiste der Seite aufgelistet, jeweils mit ihrer englischen (Ausgangssprachen-)\u00dcbersetzung. Du kannst eine dieser \u00dcbersetzungen ausw\u00e4hlen und den Editor nutzen, um die arabische \u00dcbersetzung einzugeben und zu speichern.<\/p>\n<p style=\"text-align: center\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-6683 size-large\" src=\"https:\/\/phrase.com\/wp-content\/uploads\/2019\/05\/iosph01-ph-ar-translations-1024x569.png\" alt=\"Phrase-\u00dcbersetzungsmen\u00fc | Phrase\" width=\"1024\" height=\"569\" \/><br \/>\n<em>Viel besser als das Arbeiten mit <code>.strings<\/code>-Dateien<\/em><\/p>\n<h3 id=\"toc_13\"><span class=\"ez-toc-section\" id=\"unerwuenschte-string-keys-entfernen\"><\/span>Unerw\u00fcnschte String-Keys entfernen<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Zuerst wollen wir jedoch einige dieser Keys ausd\u00fcnnen. Unsere App hat ein paar Beschriftungen, die dynamisch von unseren View-Controllern bef\u00fcllt werden, deshalb sollten wir diese nicht direkt \u00fcbersetzen. F\u00fcge diese Keys zu deiner Blockliste hinzu, damit Phrase sie nicht mehr verwaltet. Navigiere zuerst zu unserer Hauptprojektseite. Dann w\u00e4hlen wir in der Tab-Leiste <em>Mehr &gt; Blockierte Keys <\/em> (fr\u00fcher: Blacklisted Keys).<\/p>\n<p style=\"text-align: center\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-6685 size-large\" src=\"https:\/\/phrase.com\/wp-content\/uploads\/2019\/05\/iosph01-ph-blacklist-link-1-1024x724.png\" alt=\"Men\u00fcpunkt \u201eBlacklisted Keys\u201c in Phrase | Phrase\" width=\"1024\" height=\"724\" \/><br \/>\n<em>Lass uns dieses wuchernde Gestr\u00fcpp zur\u00fcckschneiden<\/em><\/p>\n<p>Sobald wir auf der Seite <em>Blockierte Keys<\/em> -Seite sind, k\u00f6nnen wir einfach auf die Schaltfl\u00e4che <em>Blockierte Keys hinzuf\u00fcgen<\/em> oben rechts auf dem Bildschirm klicken, um einen Dialog zu \u00f6ffnen, in dem wir unseren problematischen Key eingeben.<\/p>\n<p style=\"text-align: center\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-6686 size-large\" src=\"https:\/\/phrase.com\/wp-content\/uploads\/2019\/05\/iosph01-ph-adding-blacklisted-key-1024x428.png\" alt=\"Blockierte Keys hinzuf\u00fcgen | Phrase\" width=\"1024\" height=\"428\" \/><em>Denke daran, den Key, nicht den Wert hinzuzuf\u00fcgen<\/em><\/p>\n<p>Wir f\u00fcgen einfach den Key hinzu, klicken auf <em>Speichern<\/em> und wiederhole das f\u00fcr jeden Key, den wir unseren \u00dcbersetzer*innen nicht zeigen m\u00f6chten.<\/p>\n<p><em>Hinweis \u00bb<\/em> Lies mehr \u00fcber das Blockieren, L\u00f6schen und Ausschlie\u00dfen von Keys erf\u00e4hrst du in unserem Leitfaden <a href=\"https:\/\/support.phrase.com\/hc\/de\/articles\/5784119185436-Keys-Strings\"><span style=\"font-weight: 400\">Keys (Strings)<\/span><\/a>.<\/p>\n<h3 id=\"toc_14\"><span class=\"ez-toc-section\" id=\"uebersetzen-der-uebersetzungseditor\"><\/span>\u00dcbersetzen: Der \u00dcbersetzungseditor<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Jetzt kannst du jede der verbleibenden \u00dcbersetzungen ausw\u00e4hlen, ihre arabische \u00dcbersetzung im \u00dcbersetzungseditor hinzuf\u00fcgen und auf die Schaltfl\u00e4che <em>Speichern<\/em> klicken.<\/p>\n<p style=\"text-align: center\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-6687 size-large\" src=\"https:\/\/phrase.com\/wp-content\/uploads\/2019\/05\/iosph01-ph-edit-and-save-838x1024.png\" alt=\"Unsere \u00dcbersetzung speichern | Phrase\" width=\"838\" height=\"1024\" \/><em>Der Komfort des Phrase \u00dcbersetzungseditors<\/em><\/p>\n<p>Es ist wirklich so einfach. Und das Tolle ist, dass der Entwickler, der an der App arbeitet, weder auf die 100\u00a0% vollst\u00e4ndigen \u00dcbersetzungen noch auf eine Dateifreigabe von \u00dcbersetzenden warten muss. Du kannst die neuesten \u00dcbersetzungen jederzeit mit dem Phrase Client herunterladen.<\/p>\n<h3 id=\"toc_15\"><span class=\"ez-toc-section\" id=\"uebersetzungen-herunterladen-abrufen\"><\/span>\u00dcbersetzungen herunterladen (abrufen)<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Wir k\u00f6nnen jederzeit aktuelle \u00dcbersetzungen abrufen, indem wir den folgenden Befehl in der Befehlszeile ausf\u00fchren.<\/p>\n<div>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\"><code class=\"language-none\">$ phraseapp pull<\/code><\/pre>\n<\/div>\n<p>Wenn du jetzt den <code>pull<\/code>-Befehl ausf\u00fchrst, solltest du eine Nachricht wie diese sehen:<\/p>\n<div>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\"><code class=\"language-none\">Downloaded ar in Views\/ar.lproj\/Main.strings<\/code><\/pre>\n<\/div>\n<p>Wir sollten jetzt alle aktuellen arabischen \u00dcbersetzungen in unserem Projekt haben. Wir k\u00f6nnen dies \u00fcberpr\u00fcfen, indem wir unsere <code>Views\/ar.lproj\/Main.strings<\/code> \u00f6ffnen.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-group=\"3\" data-enlighter-title=\"rawMain.strings\">\/* Class = \"UILabel\"; text = \"ARTIST\"; ObjectID = \"2aL-Sw-YDC\"; *\/\n\"2aL-Sw-YDC.text\" = \"\u0627\u0644\u0641\u0646\u0627\u0646 \";\n\/* Class = \"UIBarButtonItem\"; title = \"Back\"; ObjectID = \"cL2-YV-w5P\"; *\/\n\"cL2-YV-w5P.title\" = \"\u0631\u062c\u0648\u0639\";\n\/\/ ...<\/pre>\n<p>Phrase hat alle unsere arabischen \u00dcbersetzungen heruntergeladen. Das spart viel Zeit, besonders bei gro\u00dfen Projekten. Stell dir Teams von Entwickler*innen und \u00dcbersetzenden vor, die an einer App mit nur vier oder f\u00fcnf unterst\u00fctzten Sprachen arbeiten. Jede Sprache kann ihren eigenen \u00dcbersetzenden oder ein \u00dcbersetzerteam haben, und du musst den Fluss all dieser <code>.strings<\/code>-Dateien verwalten. Phrase macht unsere Lokalisierungsarbeit bereits dadurch deutlich reibungsloser.<br \/>\nWenn wir unsere App auf Arabisch starten, k\u00f6nnen wir sehen, dass alle unsere Storyboard-Labels tats\u00e4chlich \u00fcbersetzt wurden.<\/p>\n<p style=\"text-align: center\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-6688 size-large\" src=\"https:\/\/phrase.com\/wp-content\/uploads\/2019\/05\/iosph01-sim-ar-translations-617x1024.png\" alt=\"Demo-App ins Arabische \u00fcbersetzt | Phrase\" width=\"617\" height=\"1024\" \/><em>Al salam aleikum<\/em><\/p>\n<h3 id=\"toc_16\"><span class=\"ez-toc-section\" id=\"code-uebersetzen-eine-localizablestrings-datei-hinzufuegen\"><\/span>Code \u00fcbersetzen: eine Localizable.strings-Datei hinzuf\u00fcgen<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Bisher haben wir uns darauf konzentriert, <code>Main.storyboard<\/code> zu \u00fcbersetzen. Das ist alles gut und sch\u00f6n, aber was ist mit dem Code? Oft hast du Strings in deinem Code eingebettet, die du lokalisieren musst.<br \/>\nZum Beispiel: Angenommen, du m\u00f6chtest am unteren Rand des Track-Detail-Bildschirms deiner App einen Copyright-Hinweis hinzuf\u00fcgen.<\/p>\n<p style=\"text-align: center\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-6689 size-large\" src=\"https:\/\/phrase.com\/wp-content\/uploads\/2019\/05\/iosph01-sim-en-copyright-648x1024.png\" alt=\"Copyright-Leiste in der Demo-App | Phrase\" width=\"648\" height=\"1024\" \/><em>K\u00e4mpfe f\u00fcr dein Recht<\/em><\/p>\n<p>Zuerst f\u00fcgen wir eine <code>Localizable.strings<\/code>-Datei zu unserem XCode-Projekt hinzu und stellen sicher, dass sie lokalisiert ist, indem wir die Datei ausw\u00e4hlen und auf <em>Lokalisieren<\/em> im Dateiinspektor klicken. Nachdem wir das getan haben, k\u00f6nnen wir die K\u00e4stchen f\u00fcr Arabisch und Englisch unter <em>Lokalisierungen<\/em> f\u00fcr die Datei ankreuzen.<br \/>\nJetzt k\u00f6nnen wir die englische <code>Localizable.strings<\/code>-Datei \u00f6ffnen und Folgendes hinzuf\u00fcgen:<\/p>\n<div>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\"><code class=\"language-none\">\"copyright\" = \"Copyright \u00a9 %@ %@. Alle Rechte vorbehalten;<\/code><\/pre>\n<\/div>\n<p>Dies ist eine formatierte Zeichenfolge, die dynamische Zeichenfolgen enth\u00e4lt, welcher in unserem Swift-Code interpoliert werden. Tausche die <code>%@ %@<\/code> mit dem aktuellen Jahr und dem Namen des K\u00fcnstlers aus, da sich diese Werte in unserer App dynamisch \u00e4ndern.<br \/>\nAngenommen, wir haben das Copyright-Label in unserem Storyboard erstellt und mit einem Outlet in unserem Controller verkn\u00fcpft, k\u00f6nnen wir unseren Controller folgenderma\u00dfen aktualisieren:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"swift\" data-enlighter-group=\"4\" data-enlighter-title=\"TrackDetailsViewController.swift\">import UIKit\nclass TrackDetailsViewController: UIViewController {\n    \/\/ ...\n    @IBOutlet weak var copyrightLabel: UILabel!\n    var track: Verfolgen?\n    override func viewDidLoad() {\n        super.viewDidLoad()\n        if let track = track {\n            \/\/ ...\n            copyrightLabel.text = getCopyrightText(artistName: track.artistName)\n        }\n    }\n    func setup(with track: Track) {\n        self.track = track\n    }\n    fileprivate func getCopyrightText(artistName: String) -&gt; String {\n        let format = NSLocalizedString(\"copyright\", comment: \"\")\n        let currentYear = \"\\(Calendar.current.component(.year, from: Date()))\"\n        return String.localizedStringWithFormat(format, currentYear, artistName)\n    }\n}<\/pre>\n<p>Damit wir damit in Phrase arbeiten k\u00f6nnen, f\u00fcgen wir unsere <code>Localizable.strings<\/code>-Datei zu unserer <code>.phraseapp.yml<\/code> hinzu.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"yaml\" data-enlighter-group=\"5\" data-enlighter-title=\".phraseapp.yml\">phraseapp:\n  access_token: &lt;dein_access_token&gt;\n  project_id: &lt;your_project_id&gt;\n  push:\n    sources:\n    - file: .\/Views\/en.lproj\/Main.strings\n      params:\n        locale_id: fd935424a9ef2dfd054d982ccb7a8064\n        file_format: strings\n    - file: .\/en.lproj\/Localizable.strings\n      params:\n        locale_id: fd935424a9ef2dfd054d982ccb7a8064\n        file_format: strings\n  pull:\n    targets:\n    - file: .\/Views\/ar.lproj\/Main.strings\n      params:\n        locale_id: 9c380148d7c1827b6c1db12f0b1a9da8\n        file_format: strings\n    - file: .\/ar.lproj\/Localizable.strings\n      params:\n        locale_id: 9c380148d7c1827b6c1db12f0b1a9da8\n        file_format: strings<\/pre>\n<p>Wie zuvor f\u00fcgen wir die englische <code>Localizable.strings<\/code>-Datei als Ausgangssprache (Quelle) und ihre arabische Entsprechung als Zielsprache hinzu.<br \/>\nDann f\u00fchren wir <code>$ phraseapp push<\/code> aus, um die neue \u00dcbersetzung in Phrase hochzuladen. Sobald das erledigt ist, k\u00f6nnen wir unsere Phrase Webkonsole \u00f6ffnen und zu den arabischen \u00dcbersetzungen unseres Projekts navigieren. Wenn wir unseren Key gefunden haben, kannst du den \u00dcbersetzungseditor nutzen, um unsere formatierte Zeichenfolge zu \u00fcbersetzen.<\/p>\n<p style=\"text-align: center\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-6690 size-large\" src=\"https:\/\/phrase.com\/wp-content\/uploads\/2019\/05\/iosph01-ph-translating-copyright-845x1024.png\" alt=\"\u00dcbersetzung unserer Copyright-Leiste ins Arabische | Phrase\" width=\"845\" height=\"1024\" \/><em>Wieder dieser sch\u00f6ne Editor<\/em><\/p>\n<p>Beachte, wie Phrase unsere <code>%@<\/code> Platzhalter erkennt. Tats\u00e4chlich k\u00f6nnen wir auf diese Platzhalter (oder jedes beliebige Wort) in der urspr\u00fcnglichen englischen Quelle klicken, damit sie automatisch an der Cursorposition im Editor eingef\u00fcgt werden. Das ist sehr praktisch f\u00fcr \u00dcbersetzende, da sie sich die kniffligen Zeichenfolgen, aus denen unsere Platzhalter bestehen, nicht merken m\u00fcssen.<br \/>\nSobald wir unsere \u00dcbersetzung gespeichert haben, k\u00f6nnen wir <code>$ phraseapp pull<\/code> auf unserem lokalen Rechner ausf\u00fchren, um sie abzurufen. Nachdem der <code>pull<\/code> abgeschlossen ist, k\u00f6nnen wir unsere App auf Arabisch ausf\u00fchren, um unser Update zu sehen.<\/p>\n<p><em>Hinweis \u00bb<\/em> Wenn wir mehrere Ziele haben, aggregiert Phrase alle \u00dcbersetzungen zu einer gro\u00dfen Liste und f\u00fcgt diese Liste bei allen Zielen ein. Das bedeutet im Grunde, dass unsere Ziele Kopien voneinander sein werden. Solange wir keine Keys in unseren <code>.strings<\/code>-Dateien duplizieren, sollte das aber kein Problem sein.<\/p>\n<p style=\"text-align: center\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-6691 size-large\" src=\"https:\/\/phrase.com\/wp-content\/uploads\/2019\/05\/iosph01-sim-ar-copyright-600x1024.png\" alt=\"Vollst\u00e4ndig \u00fcbersetzte Demo-App | Phrase\" width=\"600\" height=\"1024\" \/><em>Unsere kleine App, komplett \u00fcbersetzt<br \/>\n<\/em><\/p>\n<p><em>Hinweis \u00bb<\/em> Du kannst <a href=\"https:\/\/github.com\/PhraseApp-Blog\/ios-phraseapp-complete\">das abgeschlossene, funktionierende XCode-Projekt<\/a> bei Github finden.<br \/>\n<em>Hinweis \u00bb<\/em> Um noch mehr Zeit zu sparen, lies <a href=\"https:\/\/phrase.com\/blog\/posts\/ios-automate-ios-storyboard-localization\/\">Lokalisierung von iOS-Storyboards automatisieren<\/a> und lerne, wie du die Lokalisierung von Storyboards mit Phrase automatisierst.<\/p>\n<h2 id=\"toc_17\"><span class=\"ez-toc-section\" id=\"cest-fini\"><\/span>C&#8217;est fini<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Das war unser Ausflug in die iOS-App-Lokalisierung mit Phrase Strings. Hoffentlich beginnst du die Zeitersparnis zu sehen, die dir der l10n-Workflow von Phrase Strings bietet \u2013 und dabei haben wir nur einen Bruchteil seiner Funktionen behandelt. Phrase Strings ist f\u00fcr Entwickler gemacht und bietet dir eine umfangreiche CLI sowie eine API, die du anbinden kannst, um eigene Lokalisierungs-Workflows zu erstellen. Das Beste daran ist, dass Phrase Strings nur eines der <a href=\"https:\/\/phrase.com\/de\/platform\/\">\u00dcbersetzungsprodukte<\/a> innerhalb der Phrase Localization Platform ist. Sie erm\u00f6glicht es dir, dich mit einem vollwertigen \u00dcbersetzungsmanagementsystem zu verbinden, auch w\u00e4hrend deine \u00dcbersetzungsbed\u00fcrfnisse wachsen. Registriere dich f\u00fcr eine kostenlose 14-t\u00e4gige Testversion und lass dei Phrase Localization Platform die ganze Arbeit \u00fcbernehmen \u2013 damit du dich auf den Code konzentrieren kannst, den du liebst.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Viele Sprachversionen, viele \u00dcbersetzende und viele Entwickler \u2013 so hilft Phrase Strings wachsenden Organisationen, ihren iOS-App-Lokalisierungsprozess zu zentralisieren und zu optimieren.<\/p>\n","protected":false},"author":41,"featured_media":2612,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"post-refresh-updated","format":"standard","meta":{"_acf_changed":false,"_stopmodifiedupdate":false,"_modified_date":"","_searchwp_excluded":"","episode_type":"","audio_file":"","podmotor_file_id":"","podmotor_episode_id":"","cover_image":"","cover_image_id":"","duration":"","filesize":"","filesize_raw":"","date_recorded":"","explicit":"","block":"","itunes_episode_number":"","itunes_title":"","itunes_season_number":"","itunes_episode_type":"","footnotes":""},"categories":[46],"class_list":["post-133285","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-software-lokalisierung"],"acf":[],"_links":{"self":[{"href":"https:\/\/phrase.com\/de\/wp-json\/wp\/v2\/posts\/133285","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/phrase.com\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/phrase.com\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/phrase.com\/de\/wp-json\/wp\/v2\/users\/41"}],"replies":[{"embeddable":true,"href":"https:\/\/phrase.com\/de\/wp-json\/wp\/v2\/comments?post=133285"}],"version-history":[{"count":4,"href":"https:\/\/phrase.com\/de\/wp-json\/wp\/v2\/posts\/133285\/revisions"}],"predecessor-version":[{"id":136328,"href":"https:\/\/phrase.com\/de\/wp-json\/wp\/v2\/posts\/133285\/revisions\/136328"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/phrase.com\/de\/wp-json\/wp\/v2\/media\/2612"}],"wp:attachment":[{"href":"https:\/\/phrase.com\/de\/wp-json\/wp\/v2\/media?parent=133285"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/phrase.com\/de\/wp-json\/wp\/v2\/categories?post=133285"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}