我知道这篇文章似乎有重复......但我已经研究过了,我找不到答案......请帮助我。
我有一个应用程序翻译为两种语言(葡萄牙语和英语),我的字符串和故事板是葡萄牙语,例如:
[[self labelTest] setText:NSLocalizedString(@"Essa é uma label", nil)];
我的资源中包含en.lproj/Localizable.strings
和pt.lproj/Localizable.strings
本地化本机开发区域设置为" en"。
我在这里理解的是,如果用户语言是英语en.lproj被加载,何时加载葡萄牙语pt.lproj,何时是法语或任何其他语言。应该加载en.lproj,但事实并非如此。如果我将我的设备设置为西班牙语,法语或任何其他语言,我会看到葡萄牙语,我想要显示英语。
以下是我看过的帖子但仍然失败:
iOS App default Language "en" is not applied
AppStore language description and "Localization native development region"
What is the meaning of "Localization native development region" entry in info.plist?
http://useyourloaf.com/blog/2010/05/10/fixing-xcode-default-development-region.html
当找不到用户设备语言的Localizable.strings时,我总是要用英语加载语言?
答案 0 :(得分:0)
我已经检查了你的链接,其中一个已经报道了,但我确定要提一下。
根据Apples Property List Key Reference,您可以通过 CFBundleDevelopmentRegion 设置默认语言:
CFBundleDevelopmentRegion(String - iOS,OS X)
指定捆绑包的本机区域。该键包含一个字符串 通常对应于人的母语的价值 是谁写的。此值指定的语言用作 如果无法为用户找到资源,则为默认语言 首选地区或语言。
这当然只有在您的语言项目设置正确的情况下才有效。因此,请检查信息projects settings
中的tab
是否列出了这两种语言,并且您的资源是否已正确复制(Copy Bundle Resources
)
答案 1 :(得分:0)
打破头后,我终于找到了答案。我不知道这个答案是否最好,但这对我有用。见下文:
#import "UtilHelp.h"
@implementation UtilHelp
//https://developer.apple.com/library/mac/qa/qa1391/_index.html
+ (NSString*)preferredUserLanguage {
NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults];
NSDictionary * globalDomain = [defaults persistentDomainForName:@"NSGlobalDomain"];
NSArray * languages = [globalDomain objectForKey:@"AppleLanguages"];
NSString* preferredLang = [languages objectAtIndex:0];
return preferredLang;
}
@end
int main(int argc, char * argv[])
{
NSString * preferredUserLanguage = [UtilHelp preferredUserLanguage];
// Save the user's preferred order
NSArray * defaultAppleLanguages = [[NSUserDefaults standardUserDefaults] objectForKey:@"AppleLanguages"];
// When your app loaded, use this object for back AppleLanguages to default
[[NSUserDefaults standardUserDefaults] setObject:defaultAppleLanguages forKey:@"DefaultAppleLanguages"];
//
// Check if language of the device contains between your files Localizable.string
// YES: Good!
// NO: Defines developmentLocalization as the preferred language
//
if(![[[NSBundle mainBundle] localizations] containsObject:preferredUserLanguage])
{
// Don't forget the configure CFBundleDevelopmentRegion with your preferred region
NSString * developmentLocalization = [[NSBundle mainBundle] developmentLocalization];
// Apple Guide:
// ------------------------------------------------------------------------------------------
// The returned array contains the
// languages associated with the AppleLanguages key in the user's preferred order.
// Thus, in most cases, you would simply want to get the first object in the array.
//
preferredUserLanguage = developmentLocalization;
}
// set the preferred User Language
[[NSUserDefaults standardUserDefaults] setObject:@[preferredUserLanguage] forKey:@"AppleLanguages"];
@autoreleasepool{
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// default AppleLanguages
NSArray * defaultAppleLanguages = [[NSUserDefaults standardUserDefaults] objectForKey:@"DefaultAppleLanguages"];
[[NSUserDefaults standardUserDefaults] setObject:defaultAppleLanguages forKey:@"AppleLanguages"];
return YES;
}
希望这有助于某人。 Thakn你。
答案 2 :(得分:0)
如果您仍在寻找解决方案,我遇到了类似的问题,如果当前所选语言没有本地化文件,我希望从特定的本地化文件中获取字符串。
iOS Localizable.strings not being retrieved from BASE file
包含上述问题的链接和下方解决方案的文字(除非您真的想要,否则无需关注链接)。
NSString *path = [[NSBundle mainBundle] pathForResource:[[NSLocale preferredLanguages] objectAtIndex:0] ofType:@"lproj"];
if (path == nil)
{
path = [[NSBundle mainBundle] pathForResource:@"Base" ofType:@"lproj"];
}
NSLocalizedStringFromTableInBundle(@"TAB_TITLE_Camera", @"Localizable", [NSBundle bundleWithPath:path], @"");
简单的解决方案,可以完成我需要的一切。
适用于 iOS 6.1 和 iOS 7.1 。
我认为您需要做的就是改变
pathForResource:@"Base"
到
pathForResource:@"en"
或您想要的任何语言。
希望这可以提供帮助。非常高兴我在寻找答案长期失败后想出了这个解决方案。