By localizing an iPhone app, we display cultural information in the user’s specified locale, but what about the text, like the application name and displaying visible information in user’s preferred language. In this tutorial, I will show you how we can use resource files to display visible text in user’s language.
- Localizing iPhone Apps – Part 1
- Localizing iPhone Apps – Custom Formatter
- Localizing iPhone Apps – Internationalization
Introduction
Localization and Internationalization are complimentary activities, with
one we can display cultural information like units, dates in the user’s
preferred locale and the other, let’s us display text in the user’s
preferred language.
The first step is to find out what languages your application is going to support and gather all the text (in different languages), images, videos, sounds and put them in a resource file or in a language directory. To translate text into different languages you can a tool that Google provides here. Even if you do not plan to support different languages in your app, it is a good idea to get it set up front.
The user can change the language by going to Settings -> General -> International -> Language. When the language is changed, the iPhone also changes the name of the application, only if the application supports it.
Preparing for Internationalization
In our sample app, we are going to support two languages English and
Italian. Create a new project in Xcode, does not matter what template
you select. After you have created your project, open the project
location in Finder and create two directories called en.lproj and
it.lproj. These two directories become the language project for your
application. All the English language resources will stored in the
folder en.lproj and the Italian language resources will be stored in
it.lproj folder. The resource files that contain the localizable string
are called “strings” file and their default name is
“Localizable.strings”. So, we will create two new strings file in Xcode,
select Resources and click on File -> New File -> Other (under
Mac OS X) -> Strings file and click on Next, name your file
“Localizable.strings” and save it in en.lproj directory. Repeat the same
process by saving it in it.lproj directory. This is how the files look
like in Xcode, since Xcode is smart enough to figure out that the file
is localized for two different languages.
Localizing strings file
Strings are localized in the format “key” = “value”;. The key and the
value is in double quotes followed by a semi-colon. You can also add
comments above every key-value pair, so the resource file is properly
documented. Let’s add a key-value resource in English and Italian as
follows in its own Localizable.strings file
//Localizable.String file for the English version. "WelcomeKey" = "Welcome!!!"; //Localizable.strings file for the Italian version. "WelcomeKey" = "Benvenuto!!!";
Let’s look at some code on how to get these values from the resource file and display it.
- (void)applicationDidFinishLaunching:(UIApplication *)application { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSArray *languages = [defaults objectForKey:@"AppleLanguages"]; NSString *currentLanguage = [languages objectAtIndex:0]; NSLog(@"Current Locale: %@", [[NSLocale currentLocale] localeIdentifier]); NSLog(@"Current language: %@", currentLanguage); NSLog(@"Welcome Text: %@", NSLocalizedString(@"WelcomeKey", @"")); // Override point for customization after application launch [window makeKeyAndVisible]; }
We get the list of languages by using the key AppleLanguages and then get the first language which is the user’s preferred language. We then display some basic information like the locale, language and then display the localized string using NSLocalizedString function, which takes two parameters a key and comment which you can leave it blank. The comment parameter does serve a purpose when we want to generate the strings file automatically. Nowhere in the function we specify, from which language directory we want to display the localized string, it is what we can call language sensitive. If it cannot find the preferred language directory then it picks up second language from the list and so on.
Creating the resource file using genstrings
Using the genstrings tool, we can create the strings file automatically.
Be sure to use NSLocalizedString function every where in your code to
display the localized text for a given key. When the tool is used on the
source files, it will extract all the keys, comments and create a
strings file for you, where the comment is set to be the value for the
key. All you then have to do is change the value for the keys according
to the the language. You can run the command line tool like this to
generate “Localizable.strings” file under en.lproj directory.
genstrings -o en.lproj *.m
Before you run the command, make sure the target directory exists.
Localizing iPhone display name
When the user changes its preferred language, the iPhone will also
change the display name for all the apps, if it supports that language.
Let’s see how we can display the app name in Italian, in English our
sample app is called “StringsFile”. Create new strings file and save it
in it.lproj directory, with the name “InfoPlist.strings”. Add a new
entry with the key “CFBundleDisplayName” without quotes and set the
value to “Stringhe di file” (I know not a proper translation, but you
get the idea). This is how the file should look like
CFBundleDisplayName = "Stringhe di file";
Now change your preferred language to Italian and the name of your application will be changed. Once you change the language back to English it will say “StringsFile”, we do not need to create a new InfoPlist.strings file for English.
Conclusion
Since your iPhone app can be downloaded by anyone in any Country, it
becomes extremely important that the app looks and behaves according to
the user’s locale and language. I hope this tutorial has helped you in
localizing your apps.
Happy Programming,
iPhone SDK Articles
Attachments
Suggested Readings
- Localizing iPhone Apps – Part 1
- Localizing iPhone Apps – Custom Formatter
- Localizing iPhone Apps – Internationalization
'프로그래밍 > iOS' 카테고리의 다른 글
로컬라이징 (0) | 2012.02.17 |
---|---|
문자열 지역화 (0) | 2012.02.17 |
NSDate / NSDateFormatter date (1) | 2012.02.15 |
맵뷰(MapView) 5장 - 한점과 나의 거리는?? (getDistanceFrom:) (0) | 2012.02.09 |
맵뷰(MapView) 4장 - 원하는 위치를 표시(Pin Annotation)하자!! (0) | 2012.02.09 |