在iOS中以编程方式更改应用程序中的语言
如何更改Xcode 5中的语言 我在在iOS中以编程方式更改应用程序中的语言,ios,xcode,localization,Ios,Xcode,Localization,如何更改Xcode 5中的语言 我在ChangeLanguageViewController 这是: 英式 简体中文 马来西亚语 以下是代码: #import <UIKit/UIKit.h> @interface ChangeLanguageViewController :UIViewController -(IBAction)changeEnglish:(id)sender; -(IBAction)changeChinesesimplified:(id)sender; -(IB
ChangeLanguageViewController
这是:
- 英式
- 简体中文
- 马来西亚语
#import <UIKit/UIKit.h>
@interface ChangeLanguageViewController :UIViewController
-(IBAction)changeEnglish:(id)sender;
-(IBAction)changeChinesesimplified:(id)sender;
-(IBAction)changeBahasaMalaysia:(id)sender;
-(IBAction)changeEnglish:(id)sender{
[[NSUSerDefaults standardUSerDefaults] setObject:[NSArray arrayWithObjects:@"en", @"zh-Hans", @"ms", nil] forKey:@"AppleLanguage"];
}
-(IBAction)changeChinesesimplified:(id)sender{
[[NSUSerDefaults standardUSerDefaults] setObject:[NSArray arrayWithObjects:@"zh-Hans", @"ms", @"en", nil] forKey:@"AppleLanguage"];
}
-(IBAction)changeBahasaMalaysia:(id)sender{
[[NSUSerDefaults standardUSerDefaults] setObject:[NSArray arrayWithObjects:@"ms",@"en",@"zh-Hans", nil] forKey:@"AppleLanguage"];
}
#导入
@接口更改语言ViewController:UIViewController
-(iAction)changeEnglish:(id)发送者;
-(iAction)changeChinesesimplified:(id)发送方;
-(iAction)changeBahasaMalaysia:(id)发送方;
-(iAction)changeEnglish:(id)发件人{
[[NSUSerDefaults standardUSerDefaults]setObject:[NSArray阵列,其对象为:@“en”、“zh Hans”、“ms”、“nil]forKey:@“AppleLanguage”];
}
-(iAction)changeChinesesimplified:(id)发件人{
[[NSUSerDefaults standardUSerDefaults]setObject:[NSArray阵列,其对象为:@“zh Hans”、“ms”、“en”、“nil]forKey:@“AppleLanguage”];
}
-(iAction)changeBahasaMalaysia:(id)发送方{
[[NSUSerDefaults standardUSerDefaults]setObject:[NSArray阵列,其对象为:@“ms”@“en”@“zh Hans”,nil]forKey:@“AppleLanguage”];
}
我想在用户按下按钮时看到语言的变化,它不会关闭应用程序,但它会在内部更改应用程序的语言。如果不重新启动应用程序,则无法执行此操作。 因此,您需要将所选语言保存在
NSUserDefaults
中,并在main.h
的下面几行中重新启动应用程序
[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects: your_lang, nil] forKey:@"AppleLanguages"];
[[NSUserDefaults standardUserDefaults] synchronize];
通常,当您支持苹果在iOS中支持的官方语言时,没有理由在应用程序中提供语言切换,只需在项目中正确设置翻译,界面语言将自动随系统切换。但是,既然你想从应用程序中获得它,有几种方法可以做到这一点: 1) 您可以使用以下代码为您的应用强制使用特定语言:
[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"zh-Hans", @"en", @"fr", nil] forKey:@"AppleLanguages"];
[[NSUserDefaults standardUserDefaults] synchronize];
我建议将此代码放在main.m文件中“int main”函数中“return UIApplicationMain”之前的main.m文件中。但此方法要求您关闭应用程序或告诉用户重新启动应用程序,以使其生效
您可以使用
exit(0)
关闭应用程序,而无需用户强制退出应用程序,但请确保用户有机会使用UIAlertView
或类似工具中止操作,否则苹果可能会拒绝您的应用程序
2) 另一种选择是实现您自己的本地化逻辑,您只需从您自己的语言文件中获取翻译。一种从官方lproj文件中获取翻译的方法。通过这种方式,您可以在不重新启动的情况下动态更改语言,但必须手动从代码中加载所有标签文本。更改翻译时,必须重新填充屏幕上的文本。编辑:SWIFT 3 根据您的需求使用此帮助器类
class LanguageManager: NSObject {
var availableLocales = [CustomLocale]()
static let sharedInstance = LanguageManager()
var lprojBasePath = String()
override fileprivate init() {
super.init()
let english = CustomLocale(languageCode: GlobalConstants.englishCode, countryCode: "gb", name: "United Kingdom")
let finnish = CustomLocale(languageCode: GlobalConstants.finnishLangCode, countryCode: "fi", name: "Finland")
self.availableLocales = [english,finnish]
self.lprojBasePath = getSelectedLocale()
}
fileprivate func getSelectedLocale()->String{
let lang = Locale.preferredLanguages//returns array of preferred languages
let languageComponents: [String : String] = Locale.components(fromIdentifier: lang[0])
if let languageCode: String = languageComponents["kCFLocaleLanguageCodeKey"]{
for customlocale in availableLocales {
if(customlocale.languageCode == languageCode){
return customlocale.languageCode!
}
}
}
return "en"
}
func getCurrentBundle()->Bundle{
if let bundle = Bundle.main.path(forResource: lprojBasePath, ofType: "lproj"){
return Bundle(path: bundle)!
}else{
fatalError("lproj files not found on project directory. /n Hint:Localize your strings file")
}
}
func setLocale(_ langCode:String){
UserDefaults.standard.set([langCode], forKey: "AppleLanguages")//replaces Locale.preferredLanguages
UserDefaults.standard.synchronize()
self.lprojBasePath = getSelectedLocale()
}
}
class CustomLocale: NSObject {
var name:String?
var languageCode:String?
var countryCode:String?
init(languageCode: String,countryCode:String,name: String) {
self.name = name
self.languageCode = languageCode
self.countryCode = countryCode
}
}
我已经做了一个演示项目 我可以将其用于按钮吗?如果在主函数外调用,则在NSUserDefaults中更改AppleLanguages将不会产生任何效果,必须在那里进行设置。您可以使用按钮保存自己的变量,告诉用户重新启动应用程序,然后在main中读取您的变量并将其设置为AppleLanguages。“您可以在不让用户使用exit(0)强制退出应用程序的情况下终止应用程序,但请确保用户有机会使用UIAlertView或类似工具中止操作,否则苹果可能会拒绝您的应用程序。”我该怎么做呢?不要直接更改它,请看《你好,如何本地化来自服务器的动态文本》,在我的应用程序中,每个文本都必须用简体中文显示,但如何用中文显示来自英语的文本。帮助我。在本地更改服务器文本是不可能的。您需要做的是在服务器中指定两种语言,并在每个请求的标题中指定所需的请求语言。服务器应处理标题并从requestDemo项目开始返回语言@LC非常有用웃