我正在尝试更改应用程序语言,但是当我关闭应用程序并再次运行它后,我在main.h语言chages中运行此代码.这可以在不重新启动的情况下更改语言吗?
int main(int argc, char *argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSArray *languages = [NSArray arrayWithObject:@"en_GB"];
[[NSUserDefaults standardUserDefaults] setObject:languages forKey:@"AppleLanguages"];
[[NSUserDefaults standardUserDefaults] synchronize];
int retVal = UIApplicationMain(argc, argv, nil, nil);
[pool release];
return retVal;
}
Run Code Online (Sandbox Code Playgroud) 我正在开发一个支持多语言的应用程序.正如您所料,我不时使用如下代码加载一些nib文件:
self.currentController = [[newClass alloc] initWithNibName:@"CustomController" bundle:nil];
Run Code Online (Sandbox Code Playgroud)
然后,应用程序将从其languange文件夹加载相应的本地化xib版本.现在,我想知道是否可以手动加载本地化的nib文件.例如,而不是简单地加载CustomController,装载英语/法语/德国/等的CustomController的版本.
有没有办法实现这个目标?
提前谢谢你的帮助!
PS我知道这可能不是在iphone/ipad应用程序中更改语言的正确方法,但这不是我的决定
[后来的编辑] 这看起来有点奇怪,像一个黑客,但它似乎工作(加载德国笔尖):
NSString* path= [[NSBundle mainBundle] pathForResource:@"de" ofType:@"lproj"];
NSBundle* languageBundle = [NSBundle bundleWithPath:path];
self.currentController = [[newClass alloc] initWithNibName:@"CustomController" bundle:languageBundle];
Run Code Online (Sandbox Code Playgroud)
我在这里找到了提示:http://learning-ios.blogspot.com/2011/04/advance-localization-in-ios-apps.html
虽然它感觉不完全正确,我想知道是否还有其他解决方案.对于初学者来说,我觉得这会给旧版本的iO带来麻烦,因为语言文件夹有不同的命名约定
在此问题中,如何强制NSLocalizedString使用特定语言
我可以通过这种方法强制本地化.
@interface NSBundle (Language)
+(void)setLanguage:(NSString*)language;
@end
Run Code Online (Sandbox Code Playgroud)
#import <objc/runtime.h>
static const char _bundle=0;
@interface BundleEx : NSBundle
@end
@implementation BundleEx
-(NSString*)localizedStringForKey:(NSString *)key value:(NSString *)value table:(NSString *)tableName
{
NSBundle* bundle=objc_getAssociatedObject(self, &_bundle);
return bundle ? [bundle localizedStringForKey:key value:value table:tableName] : [super localizedStringForKey:key value:value table:tableName];
}
@end
@implementation NSBundle (Language)
+(void)setLanguage:(NSString*)language
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^
{
object_setClass([NSBundle mainBundle],[BundleEx class]);
});
objc_setAssociatedObject([NSBundle mainBundle], &_bundle, language ? [NSBundle bundleWithPath: [[NSBundle mainBundle] pathForResource:language ofType:@"lproj"]] : nil, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
@end
Run Code Online (Sandbox Code Playgroud)
在那之后,我需要本地化图像,因此,我喜欢这样. 本地化资产目录 …
我有一个应用程序,我希望能够获取某个键的本地化字符串,无论我当前在 iPhone 上的本地化是什么。
我的 en.lproj 本地化字符串文件中有以下内容
“黑”=“黑”;
在 es.lproj 本地化字符串文件中我有
“黑人”=“黑人”;
所以我想做的是当我的手机在美国时获取西班牙语字符串并进行相应设置
我正在使用以下代码:
let bpath:String = NSBundle.mainBundle().pathForResource("es", ofType: "lproj")! as String
let bundle = NSBundle(path: bpath as String)
let thisWord="Black"
let ourWord=NSLocalizedString(thisWord, bundle: bundle!, comment: "")
Run Code Online (Sandbox Code Playgroud)
我期望在 ourWord 的值中得到“黑人”,但我总是得到“黑人”
我错过了一些明显的东西吗?
我已将我的应用设置放入iPhone设置面板.我想在独立于iPhone系统语言的语言之间切换.可能吗?我正在使用这个建议: 如何强制NSLocalizedString使用特定的语言
但它只翻译app中的字符串,但我的nib文件是相同的.如何重装我的笔尖?
我想更改我的应用程序的语言.目前我正在以下列方式进行.我有两个按钮可以更改NSUserDefaults中的语言.但在此之前影响我的应用程序,我需要重新启动它.
这是我的代码.
- (IBAction)changeDutch:(id)sender {
[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"nl", @"en", nil] forKey:@"AppleLanguages"];
}
- (IBAction)changeEnglish:(id)sender {
[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"en", @"nl", nil] forKey:@"AppleLanguages"];
}
Run Code Online (Sandbox Code Playgroud)
这很好用.但我不希望每次都重启我的应用程序.谁能告诉我怎么做?
亲切的问候!
我已经在Swift 3.2中开发了一个应用程序,该应用程序目前使用基本语言英语。我已经添加了阿拉伯文和法文的字符串文件。但是直到我的团队完成并测试所有事情之前,我都希望将应用程序限制为一种语言,因为即使是英文版本,我也要解决一些问题并上传到App Store。删除sting和nib文件选项对我不起作用。
请让我知道是否有任何代码可以添加到appdelegate中,以限制仅英语的应用程序。
或"如何模拟按下主页按钮事件?"
我需要重新启动我的iPhone应用程序,我希望程序退出,因此用户只需要启动它.
如果我只是使用exit(0)某些更改将无法保存,就像用户通过按主页按钮退出一样.
语言更改需要重新启动.
相关代码:
- (void)onChangeLanguage: (id)sender {
NSArray *lang = [NSArray arrayWithObjects:((Whatever *)sender).newLanguage, nil];
[[NSUserDefaults standardUserDefaults] setObject:lang forKey:@"AppleLanguages"];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSArray *languages = [defaults objectForKey:@"AppleLanguages"];
NSString *currentLanguage = [languages objectAtIndex:0];
NSLog(@"Current language: %@", currentLanguage);
// ***
}
Run Code Online (Sandbox Code Playgroud)
如果用户使用主页按钮重新启动,则语言将更改.
如果// ***替换为exit(0),则语言不会更改.
我为我的iOS应用程序做了本地化.通过客户端订单我需要进行修改,即应用程序语言应该通过按钮操作进行更改.我之前的本地化是基于设备语言的工作.现在我必须修改应用程序以通过重新启动设备来更改语言.
在我的iPhone应用程序中,我想更改显示的UIKeyboard的语言.我怎样才能做到这一点?
我想让用户可以更改我的应用程序中的语言.
这里描述了执行此操作的方法,在单触引代码中将首选语言设置为荷兰语,将备用语言设置为英语:
NSUserDefaults.StandardUserDefaults.SetValueForKey
(NSArray.FromStrings("nl", "en"), new NSString("AppleLanguages"));
Run Code Online (Sandbox Code Playgroud)
您必须重新启动应用程序才能生效.但是在iPhone 4上,关闭它时应用程序不会重新启动,它只是隐藏了.是否有办法强制应用程序在关闭后重新启动?
ios ×8
localization ×7
iphone ×6
objective-c ×6
swift ×2
image ×1
ios4 ×1
localized ×1
quit ×1
restart ×1
uikeyboard ×1
xamarin.ios ×1
xib ×1