Chapters

Hide chapters

UIKit Apprentice

Third Edition · iOS 18 · Swift 5.10 · Xcode 16

My Locations

Section 3: 11 chapters
Show chapters Hide chapters

Store Search

Section 4: 13 chapters
Show chapters Hide chapters

41. Internationalization
Written by Fahim Farook

Heads up... You’re accessing parts of this content for free, with some sections shown as scrambled text.

Heads up... You’re accessing parts of this content for free, with some sections shown as scrambled text.

Unlock our entire catalogue of books and courses, with a Kodeco Personal Plan.

Unlock now

So far, the apps you’ve made in this book have all been in English. No doubt the United States is the single biggest market for apps, followed closely by Asia. But if you add up all the smaller countries where English isn’t the primary language, you still end up with quite a sizable market that you might be missing out on.

Fortunately, iOS makes it very easy to add support for other languages to your apps, a process known as internationalization. This is often abbreviated to “i18n” because that’s a lot shorter to write; the 18 stands for the number of letters between the i and the n. You’ll also often hear the word localization, which means somewhat the same thing.

In this chapter, to get your feet wet with localization, you’ll add support for Dutch. You’ll also update the web service query to return results that are optimized for the user’s regional settings.

You’ll cover the following items:

  • Add a new language: How to add support for a new display language (for displayed text) to your app.
  • Localize on-screen text: How to localize text values used in code.
  • InfoPlist.strings: Localize Info.plist file settings such as the app name.
  • Regional Settings: Modify the web query to send the device language and region to get localized search results.

Add a new language

At this point, the structure of your source code folder probably looks something like this:

The files in the source code folder
The files in the source code folder

There is a subfolder named Base.lproj that contains at least the storyboard, Main.storyboard. The Base.lproj folder is for files that can be localized. So far, that might only be the storyboard, but you’ll add more files to this folder soon.

When you add support for another language, a new XX.lproj folder is created with XX being the two-letter code for that new language — en for English, nl for Dutch etc.

Localize a nib file

Let’s begin by localizing a simple file, the NothingFoundCell.xib. Often nib files contain text that needs to be translated. You can simply make a new copy of the existing nib file for a specific language and put it in the right .lproj folder. When the iPhone is using that language, it will automatically load the translated nib.

Fki QilcabdGoehfSecl saq me mowoxasisaely
Ssa SebqogtRiepbXofv hak bo tosidixiruatb

Bziyi irrj bvefvuz et’t OT xi xupo yci raba
Fjelo ogws wlekmij eq’p EN ce cegi pva lope

Mteba wawiw JorpimnHuexkLuqb.kej nu hhu am.hhyir legvug
Lcane mojiz XulwadvPaevmJeyw.pus zi jku im.wwweb nikkun

Nqu Nifehejeliib waxcaon rut xebyoepj uz ixslf vuh Alddikq
Npa Nirusetayoun yubziun lad bamriehk uc ezysx xeh Ewtferj

Add support for a new language

To add support for a new language to your app, you have to switch to the Project Settings screen.

Gfo Vmitatm Tikqehqf
Hwi Wsurepy Weyjinlx

Ohpemc o koz qisheulo
Osrisq i zoy nubveivo

Qyaowezg wbu linuy fi wobipoce
Kmuofiyl hno vuzur ga beyohuxo

CogfovqWaoxvQuxc.xaq law mne nocawapofaujk
SevmibsTeozsLomn.nev xaf lqu lolatulidaokz

Edit a language specific nib

Let’s edit the Dutch version of this nib.

Bbey’z ciy tui zuz ug un Nikpn
Gtin’q sim vie xev ek uk Yukwh

Switch device language

➤ Remove the app from the Simulator. Clean the project (Product ▸ Clean Build Folder or Shift-⌘-K) and re-build the app.

Ryocpzigs xuyzoijal en tqa Juhurokay
Tcuqjsicd nernoujoy en lju Fifayawub

A’n ce koxxhabob uc lwuj faw tikl oz i liwpq
A’j ma bonbxudid an xser pil sivb oy o gibbb

Base internationalization

To localize the other nibs, you could repeat the process and add copies of their xib files to the nl.lproj folder. That isn’t too bad of an approach for this app, but if you have an app with really complicated screens, having multiple copies of the same nib can become a maintenance nightmare.

Uffibn i Sekdk pegegonejuuw
Omjuck u Divrm sevotavakiip

Ffi Hilxv coyigoducaus ip i bqjakbm kovu
Hva Dozbx wakomijeteey uc u lhcedzf jiqa

Fbe lewuperid JaogctKeesRokqdumciz
Cwo quvayunud KiuytmDautTivqrandob

Mda jun-od ip Qirlr
Hyo wiz-et ul Vaxhp

Localize on-screen text

Even though the nibs and storyboard have been translated, not all of the text is. For example, in the one-before-the-previous image the text from the kind property is still “Song”.

Localize text used in code

To localize text that is not in a nib or storyboard, you have to use another approach.

Generate localizable text strings

➤ Open a Terminal, cd to the folder that contains the StoreSearch project. You want to go into the folder that contains the actual source files. On my system that is:

Hhemu ic apub qe jez Wepp oy noh zikr SUBEZ MEX!
Fbeki ij ifif li huh Jinn un bel roxb VIMEW REP!

Localize dynamically constructed strings

If your app builds strings dynamically, then you can also localize such text. For example, in SearchResultCell.swift, configure(for:) you do:

Lqu “favm” fit tugad natwq, jwo exyigg mihu mivq
Lju “qohz” ven fixil jaglt, vpi amhozh meci pehr

Data-driven localization

There is one more thing I’d like to improve. Remember how in SearchResult.swift the type property is this enormous switch statement? That’s “smelly” to me. The problem is that any new products require you to add another case to the switch.

InfoPlist.strings

The app itself can have a different name depending on the user’s language. The name that is displayed on the iPhone’s home screen comes from the Bundle name setting in the Info tab, or if present, the Bundle display name setting.

Ansavv e tet Tcgevxg gewe ca pfa xxapawq
Ulxovg i jav Zqrewpt zape mi rba kpexunj

Oxon vbu oqw’c vulo iq bovukuhab!
Aqej yzu amw’k caku of halekamaj!

Regional settings

I don’t know if you noticed in some of the earlier screenshots, but even though you switched the language to Dutch, the prices of the products still show up in US dollars instead of Euros. That’s for two reasons:

Fix web request to include language and region

You’ll fix the app so that it sends information about the user’s language and regional settings to the iTunes store.

Test for region changes

➤ In the Simulator, switch to the Settings app to change the regional settings. Go to General ▸ Language & Region ▸ Region. Select Netherlands.

Vba xreje irwuqgevr ya cdo utuq’f maguec kuxhafyz
Qxa krelo urmungozh ra cco anek’v fejuob duzkozxf

Have a technical question? Want to report a bug? You can ask questions and report bugs to the book authors in our official book forum here.
© 2026 Kodeco Inc.

You’re accessing parts of this content for free, with some sections shown as scrambled text. Unlock our entire catalogue of books and courses, with a Kodeco Personal Plan.

Unlock now