(There are similar questions. Some resulted in answers that I've tried and found not to work. Others got no answers, I assume because the querents didn't supply as much detail as I'm about to.)
I started with a storyboard that worked well for my app; the strings it contains are in English. I wanted to add a French localization. I did this:
- Added a base localization, which transferred
MainStoryboard.storyboard
fromen.lproj
toBase.lproj
. - Added a French localization, which cloned
InfoPlist.strings
(English) andMainStoryboard.storyboard
(Base) intofr.lproj
. - Changed a couple of strings (titles of segments in a
UISegmentedControl
) in the FrenchMainStoryboard.storyboard
. - In the Simulator, set the language to French.
- Ran the app from Xcode.
Result: This worked; my changed strings showed up in the running application.
But I want to be all fancy. I want to do the French localization using a .strings
file. (It's not just a matter of being fancy; the French localization will be turned over to nontechnical translators, who can't be expected to master Interface Builder.) So:
- Selected the base
MainStoryboard.storyboard
in the Xcode Project navigator. - In the File inspector, under Localization, changed the French localization from "Interface Builder Cocoa Touch Storyboard" to "Localizable Strings."
- Accepted Xcode's warning that the French storyboard will be discarded
in favor of a
.strings
file, which appears in the Assistant editor. - Made the same two edits; there's no question of their being the wrong
strings, because they're all commented as
IBUISegmentedControl...segmentTitles
; and the label text doesn't appear anywhere else in the.strings
file. - Deleted the existing (working) copy of the app from the simulator.
- Ran the app.
Result: The view uses the base (originally English) localization, instead of loading the French strings.
This isn't satisfactory. I've tried deleting the app from the simulator, and even deleting the derived-data folder. The bug persists.
As I said, I can't turn a .storyboard
file over to a nontechnical translator. How can I get iOS to accept the storyboard localizations from a .strings
file?
I had the same problem with my
UISegmentedControl
s. It turns out that there is a bug in iOS 6: .strings storyboard localization won't work onUISegmentedControl
text and onUISearchBar
placeholders. See this openradar: http://openradar.appspot.com/radar?id=2159402Have you tried localizing other elements such as
UILabel
s? That should work.Here is how I solved it:
in viewDidLoad:
You can do the same for the search placeholder:
Then just create a Localizable.strings file and it will work.
For people developing for iOS 7 or higher and searching for the
.strings
format for a search bar, this is how you should translate theplaceholder
field for example: