Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

iPhone/iOS: How can I get a list of localized strings in all the languages my app is localized in?

I need to send my server a list of localizations for a particular string.

Meaning, if my app has a string Foo which is localized as @"Foo" in English and @"Фу" in Russian, I'd like to send the server a list such as this:

  • String Foo:
    • English: "Foo"
    • Russian: "Фу"

What I think I need to be able to do is:

  1. Enumerate localized strings for each language my app is localized for
  2. Get the localized version of Foo for each language

How do I do (1) and how do I do (2)?

like image 949
Tatiana Racheva Avatar asked Jun 10 '11 18:06

Tatiana Racheva


People also ask

How do I localize my iOS app?

Select your root project file, and then proceed to the project panel. Find the Localization section section, click the “plus” (+) icon, and add the desired languages. Select only the Localizable. strings file for localization.

How iOS determines the language for your app?

Q: How does iOS determine the language for my app? A: To determine the language for your app, iOS considers not only the order of the user language preferences (in General > Language & Region of the Settings application) but also the localizations your app declares it supports.

What are localized strings?

A localized string can have different values depending on the language in which the project is being build. There are two categories of localized strings: the strings included in the installation package's UI, common to every MSI file.

What is base localization iOS?

“Base” Localization lproj” to your project. The purpose of this directory is to hold the default layouts of your views (i.e. storyboards/XIBs) in your “development language”. This was originally created to alleviate the previous practice of creating separate XIBs for each language (!).


1 Answers

You can retrieve all of the string keys by reading in English.lproj/Localizable.strings as a dictionary and fetching its keys:

NSString *stringsPath = [[NSBundle mainBundle] pathForResource:@"Localizable" ofType:@"strings"];
NSDictionary *dictionary = [NSDictionary dictionaryWithContentsOfFile:stringsPath];

To get each language's translation, you can iterate over the languages for each English key and use NSLocalizedStringFromTableInBundle:

for (NSString *language in [[NSUserDefaults standardUserDefaults] objectForKey:@"AppleLanguages"]) {
    NSBundle *bundle = [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:language ofType:@"lproj"]];
    NSLog(@"%@: %@", language, NSLocalizedStringFromTableInBundle(@"Testing", @"Localizable", bundle, nil));
}
like image 102
bdunagan Avatar answered Oct 18 '22 22:10

bdunagan