Localizing in Xcode 4 with Localizable.String
Asked Answered
B

8

65

I just updated to Xcode 4.

Normally when localizing apps we add "Localizable.String" file to the project, and then navigate to "Get Info" menu and click the "Make It Localized" button.

However, in Xcode 4, there is no "Get Info" menu.

When I try to add a language it only effects the "InfoPlist.String" file (which can only localize the app's name).

How may I add localization to my app in Xcode 4?

Barber answered 18/3, 2011 at 7:9 Comment(2)
Just go through this tutorial: raywenderlich.com/2876/how-to-localize-an-iphone-app-tutorial . Hope this helps.Jackiejackinoffice
Check Use single storyboard file for Base Internationalization in iOS 6Mediterranean
M
208

It's simple once you understand it.

If you want to accomplish this with Xcode 5.x and iOS 7 or Xcode 6.x and iOS 8, check out "How to localize my app with Xcode 5?" instead.

I liked SNR's link, but his answer was a bit short.

Also, I see that this question is a bit old, and my answer may be different from older versions of Xcode. (I used Xcode v. 4.3.3)

However, i have updated my answer to work with both Xcode 4.3.5 and below + 4.4 and above (and Xcode 5.x and 6.x here: How to localize my app with Xcode 5?).

To begin you should add a new "Strings File" in the iOS Resource category.

Strings File

Next, create the file as "Localizable.strings". Create As

When the file is created, select it and open File Inspector .

The Localizable File File Inspector

EDIT: Things have changed (a bit) with the new Xcode 4.4, 4.5 (and above) (for iOS 6 support). If you'r Not using Xcode 4.4 or above, joust skip this step.

{ The Xcode 4.4, 4.5 (and above) way:

Click the "Make localized" button Make localized button

Now head over to your Main Project page. Main Project page

And click the "+" button under Localization, and select the languages you want to support.

(I'll select German / Deutsch)

List of languages

Now a window will appear asking you what files you want to localize, make sure Only the "Localizable.strings" file is selected and click Finish.

Only the "Localizable.strings" file is selected

}

{ The Xcode 4.3.5 and below way:

Click the "+" button under Localization, and select the languages you want to support.

(I'll select German / Deutsch)

List of languages

}

.

.

.

.

You should now see that you have two files under the "Localizable.strings" file.

Localizable Files

Next, add your localization strings inside both of the localization files.

English

German

Now here comes the coding part.

Here i'll simply declare a UILabel and set it's text to the Localizable file string.

Declare:

IBOutlet UILabel *testLabel;

And Inside ViewDidLoad i'll set the text using NSLocalizedString:

[testLabel setText:NSLocalizedString(@"TEST", nil)];

To finish up, just connect our testLabel in "Interface Builder".

Connect IBOutlet

Now you should be able to run the Project and see the localized string. And if you change the language, you should see the localized string change as well.

English Result Change the language German Result

Mede answered 1/7, 2012 at 13:37 Comment(7)
Really useful note regarding Xcode 4.5 (Need to add localizations from the project properties page)Nowt
Aleksandar Azizi's remarks about Xcode 4.5 and later actually apply to Xcode 4.4 and later.Aracelis
This is an awesome answer! does it work the same ways with images?Autism
When I select the Localize button I can see only English. How can I add other languages? I want to add Arabic. Thanks!Formalism
@AbdullahUmer Arabic is not officially added to the Xcode localization form, but Apple has confirmed that it will be added in the next big release of Xcode.Mede
@AleksanderAzizi okay! if Arabic is not added, i don't see other languages either. I don't see the list of languages as posted. :\Formalism
After clicking the "Make Localized" button, you first select the base language of the document you want to localize. Then, on the main project pane, you select the languages under localization.Blowout
L
13

Select the file you want to localize and klick on the file inspector in the utilities section. There is a section Localization

Limonite answered 18/3, 2011 at 11:25 Comment(0)
P
8

You can view the file info (and add localizations) when you select the file and open the "File Inspector" via the main menu's "View" -> "Utilities" -> "File Inspector".

Paulsen answered 30/3, 2011 at 9:37 Comment(1)
I can't seem to delete existing localizations from the file inspector. It asks "Do you want to delete...", but when confirming with 'Delete' button... nothing happens. The file is still there. Great.Churchgoer
E
4

first you need to add new Localizable.string file and select it and go to View" -> "Utilities" -> "File Inspector click on + button to add language in localization section. also check it XCode 4, Adding localization

Embroider answered 13/9, 2011 at 12:6 Comment(0)
T
1

the way of Localization in xcode4 has changed! right click the localizable.strings, and to add support for another language, simply click on the ‘+’ in that ‘Localization’ pane on the right.

Tombac answered 14/4, 2012 at 2:50 Comment(0)
D
1

You can take advanced of the User Defined Runtime Attributes:

http://cupobjc.blogspot.com.es/2014/04/interfaz-builder-localization.html

First define a new category for UILabel:

#import "UILabel+Localized.h"

@implementation UILabel (Localized)
-(void) setTextLocalized:(NSString *)aText{
     [self setText:NSLocalizedString(aText, nil)];
}
@end

Then in the interface builder, User Defined Runtime Attributes :

textLocalized String your string to localized

enter image description here

And you don't need to declare the IBOutlet, and don't need code this in the ViewDidLoad [testLabel setText:NSLocalizedString(@"TEST", nil)];

Dragoman answered 29/4, 2014 at 15:48 Comment(0)
D
0

If you want a dynamic way of switching languages inside your app AND using a Pods based solution check out:

https://github.com/nullic/DPLocalizationManager

Install with: pod 'DPLocalization', '~> 1.2'

It supports the same standard localization files but also uses dynamic linking using User Defined runtime attributes and also inside code such as viewDidLoad.

Some examples in the example project:

 self.startup.text = DPLocalizedString(@"TITLE", nil);
 self.label.autolocalizationKey = @"LABEL_TEXT";
 [self.label updateAutolocalizationArguments:@[@"Hello", @1234567890, [NSDate date]]];
 self.autolocalizationKey = @"TITLE";

Download the git project that includes example project showing several examples.

Distichous answered 19/9, 2014 at 3:23 Comment(1)
Also I used answer from Aleksander Azizi to build out a standard localization files inside the project, but needed a way to switch easily inside the app between languages.Distichous
I
-1

Or you could use TraductoPro to automate this process for you and save a lot oftime. It is a Mac app that integrates well with Xcode.

Imperturbable answered 19/9, 2013 at 23:58 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.