NSLocalizedString displays key not value - iphone

I am implementing localization in my app.
Here is the code,
C_TITLE.text = NSLocalizedString(#"C_TITLE", nil);
// strings files
localizable.strings (English)
"C_TITLE" = "English";
localizable.strings (French)
"C_TITLE" = "French";
But the label displays text "C_TITLE", which is key not value.
I done localization in my previous app but not faced this issue.
Code is working in simulator but not on device. Please help...
Thanks.

I'm pretty sure that it's spelled Localizable.strings, not localizable.strings. That would explain why it works on the Simulator and not on the device as the OS X file system is not case sensitive but the iPhone's is.

use [C_TITLE setText:NSLocalizedString(#"key",nil)];
will solve this.

Related

Cannot type using non-QWERTY keyboards on iOS

My iPhone app can't seem to use soft keyboards that doesn't use the US-like QWERTY layout. That is when I set the keyboard to French or Germany, even text fields cannot take in text and an error message No input manager class for input mode error is shown in the console (when debugged under Xcode). Switching to the Emoji keyboard also shows the same problem. But the problem doesn't occur on QWERTY keyboard layouts, like Dutch and Indonesian keyboards.
The all cases are consistent and reproducible both the device (iPhone 4) and the iPhone simulator.
These are error messages in the Xcode's debugger console
When the keyboard is set to French:
No input manager class for input mode: fr_FR
When the keyboard is set to Germany:
No input manager class for input mode: de_DE
When the keyboard is set to Emoji:
No input manager class for input mode: emoji
My app's deployment target is iOS 3.1.3 (I'm still supporting 1st gen devices) but the development environment is Xcode 4.3.1 and iOS 5.1 Simulator. (I don't know whether this is relevant but just in case).
Anybody can help how to fix this?
Thanks in advance.
In my case, this was caused by my swizzling -[NSBundle infoDictionary] and returning a copy of the original dictionary.
I did this to be able to change info dictionary values at runtime (specifically, providing a non-shortened bundle display name to replace the shortened value used on the home screen).
The fix was to not return a copy of the info dictionary, but with some more reflection magic handle each key obtained from the dictionary:
https://github.com/Lyndir/Pearl/blob/master/Pearl/NSBundle%2BPearlMutableInfo.m
Not sure if this answer will help you but I found it from this link: http://code.google.com/p/networkpx/wiki/Creating_Keyboard_Bundles
Anyway here is what I am talking about:
Like UIKeyboardLayoutClass, this field also can be referred using the
same "=xxx" syntax. You can also write the class name of your own
input manager class here.
If this field is missing, no input managers will be used.
Hopefully this will help you!

Problem when using special chars on Iphone app name

I have a problem while localizing the application name. The problem appears when I put an special char on a localized CFBundleDisplayName attribute.
The default name is:
"CFBundleDisplayName" = "seguridad";
And the translation to portuguese:
"CFBundleDisplayName" = "Segurança";
With this configuration, the device always show the default name ("seguridad"). But when I replace the portuguese string with:
"CFBundleDisplayName" = "Seguransa";
the localized string is shown correctly.
Any help will be apreciated.
Thanks in advance.
Ok, I've found the problem. Don't know why, but the file had an incorrect encoding (I've created it using xcode). Just changed file encoding and everything works fine now.
Thanks for the responses.
When you say "the device always show" I assume you mean on the Icon?
I seem to be able to add a 'ç' to my CFBundleDisplayName just fine. As well as any other unicode characters.
I know that when you change the 'Product Name' in your Target then you have to close & reopen your project before it'll fully take effect (daft, I know). Maybe give that a try?

NSInternalInconsistencyException Could not load nib ind bundle

I am developing an application for the iPad. The application has following details:
Base SDK: 4.2
Deployment Target: 3.2
The application is a game application and it has got 10 rounds.
In each round I am loading 6 controllers and after the completion of each round again the same cycle starts.
The application works fine till 4 rounds but at the end of 4th round it crashes given following error:
"NSInternalInconsistencyException Could not load nib ind bundle:"
I have checked for everything solution like checking the nib file name, checking the nib file path. Nib file name and nib file path both are correct and targets are also correct but still it crashes.
Any help for this will be appreciated.
Thanks,
Shyam
Right click your nib file in xcode and make sure its type is 'file.xib'.
I had this problem too, in my case the cause was that my project had no localization to italian but the app was running under "it" settings.
The simulator has English as regional setting by default, everything was ok on it while the actual device had italian settings, so the app crashes immediately when attempting to load the RootViewController, because it was looking for an italian version of it.
In XCode I added an italian localized version to the RootViewController (now I see two entries under it, one for english created by default and italian). Note that you don't need to do the real translations in the view, it's enough that you create it and leave as default. Xcode copies all labels and text from the original view, you just leave as is for the moment.
You'll have to do this for each view controller in your project. Refer to Apple docs, for explanations on internationalization and localization here.
As a workaround, some people might prefer to change the device regional settings to English while performing tests...

localization problem in iPhone App with XCode

i need to localize an existing iphone app. I've added strings files for German and English, which work well.
BUT !
I've also opened the Info-Pane of the XIB Files, klicked "add Localization", chose the languages (German and Englisch). In the View of all Ressources in XCode is see under the XIB Files now "German" and "Englisch".
I can translate all design elements in Interface Builder for German and Englisch. If i start the App on the Device or in Simulator there is always the german language displayed, also if i change the device language to "English". I also cleared all targets and deleted the app on the device and the simulator before testing.
What am i doing wrong ??
Any help is much apprechiated !
Greetings
MadMaxApp
ok ... looks like XCode has still a bug. The localization should not be named "German" and "Englisch". You need to name it "de" and "en". After clearning all targets and running in Simulator the right language xib is displayed.

Images in iPhone app appear in Simulator, but not when compiled to device

I am learning iPhone development, and have built a simple app that has an image that changes to another image when you tap it.
If i build it to the simulator, it works fine, but if i build it to the device the images dont appear. i feel like they aren't being copied across. I have checked they have been named correctly and i have made sure i imported them to 'resources'
I dont think it is a problem with the code because i added a thing to also make text appear when the image is tapped, and this works, so a button is still there doing something, it just doesn't have an image on it.
-(IBAction)changeImage:(id)sender {
[fortuneCookieButton setImage:[UIImage imageNamed:#"Image2.jpg"] forState:UIControlStateNormal];
label.hidden = NO;
}
-(IBAction)restoreImage:(id)sender {
[fortuneCookieButton setImage:[UIImage imageNamed:#"Image1.jpg"] forState:UIControlStateNormal];
label.hidden = YES;
}
Does the case (upper/lower) of all your file names match exactly for all letters? Source code & project & Mac?
just to share with you, I had this same problem and I found out the solution: I was using lower case in the file name and upper case in code. The thing is on Simulator there was no problem because Mac file system is case-insensitive but in the iPad it didn't work because iOS file system is case sensitive. ;-)
I had this problem. Bizarrely the image had been working in the past, then just stopped appearing on the device one day.
It was a PNG.
I opened it in GIMP and saved it again. Then it went back to working again. No idea why.
Crazy.
Is it the case with only PNG images or also for JPG & other format you're having same issue. If it's only for PNG image, then it might be possible they're not being compressed. Try the following way.
Select your project target & go into its info. Here go into the build tab. In the configuration select "All Configurations" from Configuration section. Now, write "COMPRESS_PNG_FILES' in the search bar. And see the status of the check-box. IF it's unchecked, then make it checked & it will work. But if it's already checked, then there should be other reason in your project.
In the later case, I would request you to create a new dummy project & check by adding 2-3 images whether it's coming or not.
Clear caches delete the previous build and try again.
I also had same problem, and it was caused by a different reason: my project has image files with the same name! Since my app has many images, I inadvertently included images with the same name. Simulator is more tolerant and show the images just fine; however, when built on device, neither of the images of the same name were copied to the build directory. Obviously xcode is more picky for device: since all images go to the same directory, the file names must be different. When there are files with the same name, xcode refuses to copy any of them since it doesn't know which one to pick.
I have the same problem. In my case, the issues is to do with the UILabel above the UIImageView that shows the image. When I change the type of UILabel to AttributedText (In Property Inspector), my real devices cannot load the image. When I change it back to Plain, it works now. I use XCode 6.2.
on top of all suggestions - it wasn't work for me until I restarted the device