{"id":732,"date":"2021-06-28T10:53:50","date_gmt":"2021-06-28T17:53:50","guid":{"rendered":"https:\/\/www.ibabbleon.com\/copywriter-translator\/?p=732"},"modified":"2021-06-28T10:53:57","modified_gmt":"2021-06-28T17:53:57","slug":"xcode-13-and-swift-localization-wwdc21","status":"publish","type":"post","link":"https:\/\/www.ibabbleon.com\/copywriter-translator\/2021\/06\/xcode-13-and-swift-localization-wwdc21\/","title":{"rendered":"Xcode 13 and Swift Localization"},"content":{"rendered":"\n<p><\/p>\n\n\n\n<h2>Everything new, shiny, \u201cjust works\u201d, and not-so-great<\/h2>\n\n\n\n<p><\/p>\n\n\n\n<p><strong>WWDC 2021<\/strong> brought Xcode 13 and Swift 5.5, the biggest advances to localization we&#8217;ve seen for a few years. These are real improvements that will make localization easier for developers. And anything that makes it easier for developers benefits translators and international users. &#x1f973; &#x1f389; &#x1f38a;<\/p>\n\n\n\n<p>All of these changes in localization require you to adopt the latest version of Xcode 13 and Swift. That may be a dealbreaker for some, but if you&#8217;ve got Swift code, I highly recommend it. The improvements include:<strong> localized Attributed Strings, improved Formatters, and something amazing (?) called Automatic Grammar Agreement.<\/strong><\/p>\n\n\n\n<p>Here&#8217;s a breakdown of all the new stuff baked into <strong>Xcode 13 localization<\/strong>.<\/p>\n\n\n\n<h2>Localized Attributed Strings<\/h2>\n\n\n\n<p><\/p>\n\n\n\n<p>Formatting text and adding links has always been a pain point in iOS and Mac localization. Many developers give us broken sentences to localize because they want to apply specific formatting (<strong>bold<\/strong>, <em>italics<\/em>, etc.), or include a <a href=\"https:\/\/www.ibabbleon.com\/contact.html\">link<\/a>. Localizing plain HTML with formatting and links, by contrast, is straightforward:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><span class=\"has-inline-color has-vivid-red-color\">Please contact us<\/span> <span class=\"has-inline-color has-vivid-cyan-blue-color\">&lt;strong&gt;<\/span><span class=\"has-inline-color has-vivid-red-color\">first<\/span><span class=\"has-inline-color has-vivid-cyan-blue-color\">&lt;\/strong&gt;<\/span> <span class=\"has-inline-color has-vivid-red-color\">at<\/span> <span class=\"has-inline-color has-vivid-cyan-blue-color\">&lt;a href=\"mailto:localize@ibabbleon.com\"&gt;<\/span><span class=\"has-inline-color has-vivid-red-color\">Support<\/span><span class=\"has-inline-color has-vivid-cyan-blue-color\">&lt;\/a&gt;<\/span><\/pre>\n\n\n\n<p>In the past, formatted or <strong>Attributed Strings<\/strong>, in iOS\/Mac development were complicated. Worse yet, Attributed strings were <span style=\"text-decoration: underline;\">not<\/span> localizable. <em>(In fact, some developers would mark strings in Xcode as Attributed just so they would not export for translation!)<\/em> In the <code>Localizable.strings<\/code> file, we would get things like:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><span class=\"has-inline-color has-vivid-red-color\">\"Please contact us \"\n\"first\"\n\" at %@\"<\/span><\/pre>\n\n\n\n<p>The developer would then merge the translations together in code, add the formatting often to the wrong word, and insert the link. <strong>But grammar and word order are different in other languages<\/strong>, and the translated result was <s>godawful<\/s> imperfect.<\/p>\n\n\n\n<p>New in Xcode 13 and Swift 5.5, Attributed Strings are:<\/p>\n\n\n\n<ul class=\"has-medium-font-size\"><li>localizable<\/li><li>can include string interpolation<\/li><li>take advantage of Markdown formatting<\/li><li>export automatically for localization<\/li><\/ul>\n\n\n\n<p>You can even convert <strong>NSAttributedString<\/strong> to the new format for use in UIKit. And Objective-C got a new <strong>NSLocalizedAttributedString<\/strong> macro. Together, these changes mean the translator can localize formatted text easily. Now, we can localize that same formatted text like this:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><span class=\"has-inline-color has-vivid-purple-color\">AttributedString<\/span><span class=\"has-inline-color has-black-color\">(<\/span><span class=\"has-inline-color has-vivid-purple-color\">localized:<\/span> <span class=\"has-inline-color has-vivid-red-color\">\"Please contact us **first** at [Support](mailto:localize@ibabbleon.com)\"<\/span>)<\/pre>\n\n\n\n<p>And working with variable values has never been easier. Just pass the values in directly:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><span class=\"has-inline-color has-vivid-purple-color\">String<\/span>(<span class=\"has-inline-color has-vivid-purple-color\">localized<\/span>: <span class=\"has-inline-color has-vivid-red-color\">\"Welcome back, <\/span><span class=\"has-inline-color has-cyan-bluish-gray-color\">\\(username)<\/span><span class=\"has-inline-color has-vivid-red-color\">!\"<\/span>) <\/pre>\n\n\n\n<p>Xcode has a new setting <strong>Use Compiler to Extract Swift Strings<\/strong> to export these texts, including Attributed strings with string interpolation, automatically. It&#8217;s on by default for new projects, but your existing projects will have to opt in:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.ibabbleon.com\/copywriter-translator\/wp-content\/uploads\/2021\/06\/xcode-use-compiler-to-extract-strings.jpg\"><img loading=\"lazy\" width=\"774\" height=\"347\" src=\"https:\/\/www.ibabbleon.com\/copywriter-translator\/wp-content\/uploads\/2021\/06\/xcode-use-compiler-to-extract-strings.jpg\" alt=\"\" class=\"wp-image-734\" srcset=\"https:\/\/www.ibabbleon.com\/copywriter-translator\/wp-content\/uploads\/2021\/06\/xcode-use-compiler-to-extract-strings.jpg 774w, https:\/\/www.ibabbleon.com\/copywriter-translator\/wp-content\/uploads\/2021\/06\/xcode-use-compiler-to-extract-strings-300x134.jpg 300w, https:\/\/www.ibabbleon.com\/copywriter-translator\/wp-content\/uploads\/2021\/06\/xcode-use-compiler-to-extract-strings-768x344.jpg 768w\" sizes=\"(max-width: 774px) 100vw, 774px\" \/><\/a><figcaption>Note that <strong>Localized String SwiftUI <\/strong>Support setting is deprecated because of the new Compiler setting.<\/figcaption><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<h2>Formatters<\/h2>\n\n\n\n<p><\/p>\n\n\n\n<p>As localizers and translators, we look at dates and numbers differently. International users expect a date or a number to look like it does in their region. iOS and macOS have always allowed users to choose their locale and region, but it is still up to developers to implement these preferences.<\/p>\n\n\n\n<p>Formatters got a lot easier with <strong>new Foundation APIs<\/strong>. There are formatters for <strong>Date \/ Number \/ ISO8601 \/ Measurement \/ PersonNameComponent<\/strong>, and more.<\/p>\n\n\n\n<p>Now there is no excuse to show a user the wrong date format!<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><span style=\"color:#a3004c\" class=\"has-inline-color\">let<\/span> locale = <span class=\"has-inline-color has-vivid-purple-color\">Locale<\/span>(<span class=\"has-inline-color has-vivid-purple-color\">identifier<\/span>: <span class=\"has-inline-color has-vivid-purple-color\">Locale.current.identifier<\/span>)\n<span style=\"color:#a3004c\" class=\"has-inline-color\">let<\/span> date = <span class=\"has-inline-color has-vivid-purple-color\">Date<\/span>()\n<span style=\"color:#a3004c\" class=\"has-inline-color\">let<\/span> now = date<span class=\"has-inline-color has-vivid-purple-color\">.formatted<\/span>(<span class=\"has-inline-color has-vivid-purple-color\">.dateTime.year<\/span>()<span class=\"has-inline-color has-vivid-purple-color\">.day<\/span>()<span class=\"has-inline-color has-vivid-purple-color\">.month<\/span>()<span class=\"has-inline-color has-vivid-purple-color\">.locale<\/span>(locale))\n<span class=\"has-inline-color has-cyan-bluish-gray-color\">\/\/ <strong>English<\/strong>: Jun 24, 2021\n\/\/ <strong>French<\/strong>: 24 juin 2021\n\/\/ <strong>Chinese<\/strong> or <strong>Japanese<\/strong>: 2021\u5e746\u670824\u65e5<\/span><\/pre>\n\n\n\n<p>Xcode not only orders the date in the way the user expects, but even includes the translations for the month name automatically. One less thing to pay us to translate, and one less headache for the translator to explain how the punctuation or order is wrong in the app!<\/p>\n\n\n\n<p>Combine this with localized Attributed strings, and you can safely format parts of the date. For example:<\/p>\n\n\n\n<div class=\"wp-container-1 wp-block-group\"><div class=\"wp-block-group__inner-container\">\n<pre class=\"wp-block-preformatted\"><span style=\"color:#a30078\" class=\"has-inline-color\">var<\/span> dateString : <span class=\"has-inline-color has-vivid-purple-color\">AttributedString<\/span> {\n<span style=\"color:#a3004c\" class=\"has-inline-color\">var<\/span> now = <span class=\"has-inline-color has-vivid-purple-color\">date.formatted<\/span>(<span class=\"has-inline-color has-vivid-purple-color\">.dateTime.year().day().month().locale<\/span>(locale).<span class=\"has-inline-color has-vivid-purple-color\">attributed<\/span>)<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\"><span style=\"color:#a3005e\" class=\"has-inline-color\">let<\/span> month = <span class=\"has-inline-color has-vivid-purple-color\">AttributeContainer<\/span> \n      .dateField(<span class=\"has-inline-color has-vivid-purple-color\">.month<\/span>)\n<span style=\"color:#a30074\" class=\"has-inline-color\">let<\/span> color = <span class=\"has-inline-color has-vivid-purple-color\">AttributeContainer<\/span>\n      .foregroundColor(<span class=\"has-inline-color has-vivid-purple-color\">.red<\/span>)\nnow.<span class=\"has-inline-color has-vivid-purple-color\">replaceAttributes<\/span>(month, <span class=\"has-inline-color has-vivid-purple-color\">with<\/span>: color)\n<span style=\"color:#a3006b\" class=\"has-inline-color\">return<\/span> now\n}\n<span class=\"has-inline-color has-cyan-bluish-gray-color\">\/\/ English: <\/span><span class=\"has-inline-color has-vivid-red-color\">Jun<\/span><span class=\"has-inline-color has-cyan-bluish-gray-color\"> 24, 2021\n\/\/ French: 24 <\/span><span class=\"has-inline-color has-vivid-red-color\">juin<\/span><span class=\"has-inline-color has-cyan-bluish-gray-color\"> 2021\n\/\/ Chinese or Japanese: 2021\u5e74<\/span><span class=\"has-inline-color has-vivid-red-color\">6\u6708<\/span><span class=\"has-inline-color has-cyan-bluish-gray-color\">24\u65e5<\/span><\/pre>\n<\/div><\/div>\n\n\n\n<p>Here, all <span class=\"has-inline-color has-vivid-red-color\">months<\/span> are in a single color, regardless of where they are in the string, or how many characters they take up.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2>Automatic Grammar Agreement<\/h2>\n\n\n\n<p><\/p>\n\n\n\n<p>As a localization specialist, I want to say <strong><em>&#8220;Jiminy, this is amazing!&#8221; <\/em><\/strong>Teaching a machine to understand grammar is <em>hard<\/em>. (<a href=\"https:\/\/www.ibabbleon.com\/copywriter-translator\/2011\/08\/google-and-bing-team-up-to-make-one-bad-translator\/\">Am I right, Google Translate?)<\/a> But then you get down to the details, and it is a little less life-changing. But there <em>is <\/em>potential, so let&#8217;s take a look at Foundations&#8217;s new <strong>Automatic Grammar Agreement<\/strong>.<\/p>\n\n\n\n<p>A new option in iOS 15 also allows users to set their \u201d<strong>Term of Address<\/strong>\u201d \u2014 basically, the user&#8217;s gender.<\/p>\n\n\n\n<div class=\"wp-container-8 wp-block-group\"><div class=\"wp-block-group__inner-container\">\n<div class=\"wp-container-3 wp-block-columns\">\n<div class=\"wp-container-2 wp-block-column\" style=\"flex-basis:100%\"><\/div>\n<\/div>\n\n\n\n<div class=\"wp-container-7 wp-block-columns\">\n<div class=\"wp-container-4 wp-block-column\" style=\"flex-basis:50%\">\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.ibabbleon.com\/copywriter-translator\/wp-content\/uploads\/2021\/06\/Screen-Shot-2021-06-24-at-1.19.19-PM-1.png\"><img loading=\"lazy\" width=\"436\" height=\"818\" src=\"https:\/\/www.ibabbleon.com\/copywriter-translator\/wp-content\/uploads\/2021\/06\/Screen-Shot-2021-06-24-at-1.19.19-PM-1.png\" alt=\"\" class=\"wp-image-737\" srcset=\"https:\/\/www.ibabbleon.com\/copywriter-translator\/wp-content\/uploads\/2021\/06\/Screen-Shot-2021-06-24-at-1.19.19-PM-1.png 436w, https:\/\/www.ibabbleon.com\/copywriter-translator\/wp-content\/uploads\/2021\/06\/Screen-Shot-2021-06-24-at-1.19.19-PM-1-160x300.png 160w\" sizes=\"(max-width: 436px) 100vw, 436px\" \/><\/a><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-container-6 wp-block-column\" style=\"flex-basis:50%\">\n<div class=\"wp-container-5 wp-block-group\"><div class=\"wp-block-group__inner-container\">\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.ibabbleon.com\/copywriter-translator\/wp-content\/uploads\/2021\/06\/Screen-Shot-2021-06-24-at-1.19.34-PM.png\"><img loading=\"lazy\" width=\"442\" height=\"818\" src=\"https:\/\/www.ibabbleon.com\/copywriter-translator\/wp-content\/uploads\/2021\/06\/Screen-Shot-2021-06-24-at-1.19.34-PM.png\" alt=\"\" class=\"wp-image-738\" srcset=\"https:\/\/www.ibabbleon.com\/copywriter-translator\/wp-content\/uploads\/2021\/06\/Screen-Shot-2021-06-24-at-1.19.34-PM.png 442w, https:\/\/www.ibabbleon.com\/copywriter-translator\/wp-content\/uploads\/2021\/06\/Screen-Shot-2021-06-24-at-1.19.34-PM-162x300.png 162w\" sizes=\"(max-width: 442px) 100vw, 442px\" \/><\/a><\/figure>\n<\/div><\/div>\n<\/div>\n<\/div>\n<\/div><\/div>\n\n\n\n<p>This means that you could write <strong><em>Welcome<\/em><\/strong> in Spanish <strong><em>Bienvenido<\/em><\/strong>, and have it automatically appear in the correct gender if the user is a man or a woman:<\/p>\n\n\n\n<p class=\"has-medium-font-size\"><code><span class=\"has-inline-color has-vivid-red-color\">Bienvenid<em>o<\/em> &#x1f481;&#x200d;&#x2642;&#xfe0f;   <br \/>Bienvenid<strong><em>a<\/em><\/strong><\/span><\/code> &#x1f64b;&#x1f3fb;&#x200d;&#x2640;&#xfe0f;<\/p>\n\n\n\n<p>That&#8217;s an improvement, but requires you to use a new custom Markdown format for strings:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><span class=\"has-inline-color has-vivid-red-color\">\"^[Welcome](inflect: true)\"<\/span><\/pre>\n\n\n\n<p><strong>BUT\u2026 so far these gender localizations are limited to only Spanish. <\/strong><\/p>\n\n\n\n<figure class=\"wp-block-pullquote\"><blockquote><p>There are a lot of females speaking other languages, too, so hopefully Apple gets on that for Xcode 14.&#x1f61b;<\/p><\/blockquote><\/figure>\n\n\n\n<p>The main purpose of <strong>Automatic Grammar Agreement<\/strong>, however, is to make the translation of plural and gendered texts faster and easier. In English, you might say:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted bg-rose\"><code><span class=\"has-inline-color has-vivid-red-color\">You have 1 open document\nYou have 2 open document<strong><em>s<\/em><\/strong><\/span><\/code><\/pre>\n\n\n\n<p>In Spanish, you would need:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted bg-rose\"><span class=\"has-inline-color has-vivid-red-color\">Tienes 1 document<strong><em>o<\/em><\/strong>&nbsp;abiert<strong><em>o<\/em><\/strong><br \/>Tienes 2 document<strong><em>os<\/em><\/strong>&nbsp;abiert<strong><em>os<\/em><\/strong><\/span><\/pre>\n\n\n\n<p>English adds an &#8216;<strong>s<\/strong>&#8216; to the plural form of &#8216;<strong>document<\/strong>&#8216;. But Spanish adds an &#8216;<strong>s<\/strong>&#8216; to the translations of both &#8216;<strong>open<\/strong>&#8216; and &#8216;<strong>document<\/strong>&#8216;. Spanish also requires swapping the word order. Other languages will be even more complicated. Some languages have no plural; others have multiple forms of plural. This is why it is best for Xcode, along with translators, to do the pluralization work, not developers.<\/p>\n\n\n\n<p><strong>Automatic Grammar Agreement<\/strong> proposes letting Xcode add those pluralizations \u201c<strong>automatically<\/strong>\u201d. Not only in English, which is pretty easy, but in Spanish, which is harder. Xcode is supposed to understand when the gender of the nouns and adjectives need to change. <\/p>\n\n\n\n<p>For plural items, you would, in theory, need just one line of code, and translations for each word, to translate <code><em><span class=\"has-inline-color has-vivid-red-color\">You have %d open document(s)<\/span><\/em><\/code>. That is:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><span class=\"has-inline-color has-vivid-red-color\">\"You have ^[\\(count) \\(document) \\(status)](inflect: true)\"<\/span><\/pre>\n\n\n\n<p>and have your translators translate separately, but only one form of:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><span class=\"has-inline-color has-vivid-red-color\">\"You have ^[%d %@ %@](inflect: true)\" <\/span><span class=\"has-inline-color has-cyan-bluish-gray-color\">= \"<\/span><span class=\"has-inline-color has-vivid-red-color\">Tienes ^[%1$d %3$@ %2$@](inflect: true)\"<\/span><span class=\"has-inline-color has-cyan-bluish-gray-color\">;<\/span><span class=\"has-inline-color has-vivid-red-color\">\n\"document\" <\/span><span class=\"has-inline-color has-cyan-bluish-gray-color\">=<\/span><span class=\"has-inline-color has-vivid-red-color\"> \"documento\"<\/span><span class=\"has-inline-color has-cyan-bluish-gray-color\">;<\/span><span class=\"has-inline-color has-vivid-red-color\">\n\"open\"<\/span> <span class=\"has-inline-color has-cyan-bluish-gray-color\">=<\/span> <span class=\"has-inline-color has-vivid-red-color\">\"abierto\"<\/span><span class=\"has-inline-color has-cyan-bluish-gray-color\">;<\/span><\/pre>\n\n\n\n<p>Yet translators would still need to translate the words <em>and<\/em> reorder them so that the noun (<span class=\"has-inline-color has-vivid-red-color\">documento<\/span>) comes before the adjective (<span class=\"has-inline-color has-vivid-red-color\">abierto<\/span>). <strong>Not much work is saved here, and the complexity has increased.<\/strong><\/p>\n\n\n\n<p class=\"has-medium-font-size\">&#x26d4;&#xfe0f; Is this easier than the current method, a <a href=\"http:\/\/ibabbleon.com\/ios_plurals_localizable_stringsdict.html\">stringsdict file<\/a>? <strong>Not really.<br \/><\/strong>&#x26d4;&#xfe0f; Is it as powerful? <strong>No. <br \/><\/strong>&#x26d4;&#xfe0f; Does it work in all languages? <strong>Not so far. <br \/><\/strong>&#x1f937;&#x200d;&#x2640;&#xfe0f; Is this future? <strong>We&#8217;ll have to see.<\/strong><\/p>\n\n\n\n<p>Apple says this is powered by the same technology that offers autocomplete &#8220;suggestions&#8221; as you type on the keyboard. Right there that tells us grammar agreement can be remarkably intuitive. It can also be an epic fail. &#x26a0;&#xfe0f;<\/p>\n\n\n\n<p>But the main reason not to bother with this quite yet is that <strong>Automatic Grammar Agreement<\/strong> is limited to only English and Spanish. At least for now. <\/p>\n\n\n\n<p>Hopefully, Apple can expand grammar agreement quickly, or bring <strong>Terms of Address<\/strong> to the stringsdict file.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2>Xcode 13 is here<\/h2>\n\n\n\n<p><\/p>\n\n\n\n<p>Xcode 13 and Swift 5.5 really do make localization easier for developers. The last feature worth mentioning is that Xcode has an xcloc editor built in. <strong>Xcloc is the package of translation files, screenshots, and notes you send to your <a href=\"https:\/\/www.ibabbleon.com\/team.html\">translators<\/a><\/strong> when you <strong>Export Localizations\u2026<\/strong> from the <strong>Product<\/strong> menu. It isn&#8217;t an amazing translation editor, but it can help you add quick comments or screenshots, or review the translations we send you.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.ibabbleon.com\/copywriter-translator\/wp-content\/uploads\/2021\/06\/Screen-Shot-2021-06-25-at-9.31.33-AM.png\"><img loading=\"lazy\" width=\"1024\" height=\"408\" src=\"https:\/\/www.ibabbleon.com\/copywriter-translator\/wp-content\/uploads\/2021\/06\/Screen-Shot-2021-06-25-at-9.31.33-AM-1024x408.png\" alt=\"\" class=\"wp-image-755\" srcset=\"https:\/\/www.ibabbleon.com\/copywriter-translator\/wp-content\/uploads\/2021\/06\/Screen-Shot-2021-06-25-at-9.31.33-AM-1024x408.png 1024w, https:\/\/www.ibabbleon.com\/copywriter-translator\/wp-content\/uploads\/2021\/06\/Screen-Shot-2021-06-25-at-9.31.33-AM-300x120.png 300w, https:\/\/www.ibabbleon.com\/copywriter-translator\/wp-content\/uploads\/2021\/06\/Screen-Shot-2021-06-25-at-9.31.33-AM-768x306.png 768w, https:\/\/www.ibabbleon.com\/copywriter-translator\/wp-content\/uploads\/2021\/06\/Screen-Shot-2021-06-25-at-9.31.33-AM-1536x613.png 1536w, https:\/\/www.ibabbleon.com\/copywriter-translator\/wp-content\/uploads\/2021\/06\/Screen-Shot-2021-06-25-at-9.31.33-AM-2048x817.png 2048w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p>So that&#8217;s Xcode 13 localization in a blog post! While I would not recommend Automatic Grammar Agreement until it supports more languages and is more fleshed out, I highly recommend adopting the new AttributedString, Formatter APIs, along with the <strong>Use Compiler to Extract Swift Strings<\/strong>. All in all, it&#8217;s a big year for localization in Xcode, and that&#8217;s good news for your international users.<\/p>\n\n\n\n<p class=\"has-large-font-size\"> &#x1f1f8;&#x1f1e6;&#x1f1f7;&#x1f1fa;&#x1f1f7;&#x1f1f4;&#x1f1e9;&#x1f1ea;&#x1f1ee;&#x1f1f9;&#x1f1ec;&#x1f1f7;&#x1f1fb;&#x1f1f3;&#x1f1f9;&#x1f1f7;&#x1f1f0;&#x1f1f7;&#x1f1ef;&#x1f1f5;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Everything new, shiny, \u201cjust works\u201d, and not-so-great WWDC 2021 brought Xcode 13 and Swift 5.5, the biggest advances to localization we&#8217;ve seen for a few years. These are real improvement","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"sfsi_plus_gutenberg_text_before_share":"","sfsi_plus_gutenberg_show_text_before_share":"","sfsi_plus_gutenberg_icon_type":"","sfsi_plus_gutenberg_icon_alignemt":"","sfsi_plus_gutenburg_max_per_row":""},"categories":[37,85,86,5,84],"tags":[94,96,95,80,92,89,65,93],"_links":{"self":[{"href":"https:\/\/www.ibabbleon.com\/copywriter-translator\/wp-json\/wp\/v2\/posts\/732"}],"collection":[{"href":"https:\/\/www.ibabbleon.com\/copywriter-translator\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.ibabbleon.com\/copywriter-translator\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.ibabbleon.com\/copywriter-translator\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ibabbleon.com\/copywriter-translator\/wp-json\/wp\/v2\/comments?post=732"}],"version-history":[{"count":18,"href":"https:\/\/www.ibabbleon.com\/copywriter-translator\/wp-json\/wp\/v2\/posts\/732\/revisions"}],"predecessor-version":[{"id":782,"href":"https:\/\/www.ibabbleon.com\/copywriter-translator\/wp-json\/wp\/v2\/posts\/732\/revisions\/782"}],"wp:attachment":[{"href":"https:\/\/www.ibabbleon.com\/copywriter-translator\/wp-json\/wp\/v2\/media?parent=732"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ibabbleon.com\/copywriter-translator\/wp-json\/wp\/v2\/categories?post=732"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ibabbleon.com\/copywriter-translator\/wp-json\/wp\/v2\/tags?post=732"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}