views:

143

answers:

5

I have a project that uses a static library (SL). In that SL, there are a couple of strings I'd like to localize and the project includes all of the localization files. The localization works just fine when storing all text translations in the same file. The thing is that I'd like to separate the SL strings from the other strings. I have tried to put two different *.strings files (Localizable.strings and Localizable2.strings) in the language folder of interest but that did not work. I have also tried to use two *.strings file with the same name (Localizable.strings) but with different paths. It didn't work either. It seems that only one localization file is supported, right? Could anyone suggest a good way of doing this? I'm using SDK 3.2 beta 2.

A: 

The file should only be called Localizable.strings and there should be one in each language folder (.lproj). Plus you have to set the Localizable.strings file that you added in Xcode to your resources to be localizable: Select the file, Get Info, select general tab and then click "Make File Localizable" and add any additional language.

Hutaffe
...so you're saying it is not possible to spread the strings of ONE language across SEVERAL files?
AOO
at least that's what I know :)
Hutaffe
A: 

The answer you received is essentially not true. You can use NSLocalizedStringFromTable and use any number of separate .strings files as you like. However this does not solve the question on how to bundle it in a static lib. I did not figure out how to do it.

Joan Lluch-Zorrilla

Joan
+1  A: 

It is not possible to bundle it in a static lib, but you can create new bundle like "MyStaticLibraryName.bundle", put inside all localizations and use the code below instead "NSLocalizedString()". All you need to do: add a static library and resource bundle.

NSString *MyLocalizedString(NSString* key, NSString* comment) {
static NSBundle* bundle = nil;
if (!bundle) {
    NSString* path = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"MyStaticLibraryName.bundle"];
    bundle = [[NSBundle bundleWithPath:path] retain];
}

return [bundle localizedStringForKey:key value:key table:nil];

}

abuharsky
A: 

Hi,

Make the localizable string for the static library, then place that string file in a folder "YourLibraryResource". Rename the folder "YourLibraryResource.bundle".

Now you include this bundle also in the project along with the library. Then use the code given by abuharsky.

xCode
A: 

Putting files with the same name intro one project never works, because in the resulting app they end up all in the same location. (Xcode doesn't preserve your directory structure.)

But you can put part of your localization into Localizable2.strings and then use:

NSLocalizedStringFromTable(@"key", @"Localizable2", @"")