资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

ios开发语言切换,IOS开发语言

iOS 主要语言切换问题

上架时需要把主要语言切换成英文,存储时一直提示“因为您必须先为使用这种语言的每个版本提供所有必需的截屏”错误。

成都创新互联是一家集网站建设,友好企业网站建设,友好品牌网站建设,网站定制,友好网站建设报价,网络营销,网络优化,友好网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。

解决办法:删除掉英文的所有截屏,构建版本不要选择内容,重新进入APP信息页面,主要语言选择英文,存储,存储成功

如何在iOS开发中切换显示语言实现国际化

1.在Project设置,添加中英两种语言:

2.新建Localizable.strings文件,作为多语言对应的词典,存储多种语言,点击右侧Localization,勾选中英:

3.添加一个字段,

在English中,添加:SUBMIT_BTN_TITLE = Go;

在Chinese中,添加:SUBMIT_BTN_TITLE = 开始;

4.一个工具类GDLocalizableController,用来切换本地语言:

//

// GDLocalizableController.h

// guide-book

//

// Created by why on 7/16/14.

// Copyright (c) 2014 why. All rights reserved.

//

#import

@interface GDLocalizableController : NSObject

+(NSBundle *)bundle;//获取当前资源文件

+(void)initUserLanguage;//初始化语言文件

+(NSString *)userLanguage;//获取应用当前语言

+(void)setUserlanguage:(NSString *)language;//设置当前语言

@end

//

// GDLocalizableController.m

// guide-book

//

// Created by why on 7/16/14.

// Copyright (c) 2014 why. All rights reserved.

//

#import GDLocalizableController.h

@implementation GDLocalizableController

static NSBundle *bundle = nil;

+ ( NSBundle * )bundle{

return bundle;

}

+(void)initUserLanguage{

NSUserDefaults *def = [NSUserDefaults standardUserDefaults];

NSString *string = [def valueForKey:@userLanguage];

if(string.length == 0){

//获取系统当前语言版本

NSArray* languages = [def objectForKey:@AppleLanguages];

NSString *current = [languages objectAtIndex:0];

string = current;

[def setValue:current forKey:@userLanguage];

[def synchronize];//持久化,不加的话不会保存

}

//获取文件路径

NSString *path = [[NSBundle mainBundle] pathForResource:string ofType:@lproj];

bundle = [NSBundle bundleWithPath:path];//生成bundle

}

+(NSString *)userLanguage{

NSUserDefaults *def = [NSUserDefaults standardUserDefaults];

NSString *language = [def valueForKey:@userLanguage];

return language;

}

+(void)setUserlanguage:(NSString *)language{

NSUserDefaults *def = [NSUserDefaults standardUserDefaults];

//1.第一步改变bundle的值

NSString *path = [[NSBundle mainBundle] pathForResource:language ofType:@lproj ];

bundle = [NSBundle bundleWithPath:path];

//2.持久化

[def setValue:language forKey:@userLanguage];

[def synchronize];

}

@end

5. 自定义一个宏方便处理:

// ----- 多语言设置

#define CHINESE @zh-Hans

#define ENGLISH @en

#define GDLocalizedString(key) [[GDLocalizableController bundle] localizedStringForKey:(key) value:@ table:nil]

6.使用:

[GDLocalizableController setUserlanguage:CHINESE];

NSLog(GDLocalizedString(@SUBMIT_BTN_TITLE));

[GDLocalizableController setUserlanguage:ENGLISH];

NSLog(GDLocalizedString(@SUBMIT_BTN_TITLE));

iOS多语言-跟随系统/应用内切换

结果:

Localizable.strings(Chinese, Simplified)

Localizable.strings(English)

PS: 使用[NSLocalizedString(@"TITLE", nil);]这种方式赋值的,多语言文件的名字必须是Localizable,否则只会显示它的key

手机系统为英文时:

手机系统为中文时:

多语言文件名字不为Localizable,创建过程一致,只是名字换成其他的,结果:

这时候仍然用NSLocalizedString给控件赋值,只会显示对应的key了

正确显示:

启动时,默认语言:

ps: 没有做什么封装 只是大概思路和用法来理解一下

IOS多语言切换4-framework中的语言切换和资源使用

开发语言:Swift 5.0

开发环境:Xcode 11.5

发布平台:IOS 13

在IOS多语言切换3文章中,我们已经实现了用户通过App手动设置语言,来设置程序文字和图片的多语言化,但随着App开发的需求,一旦引入了Framework,按照上一章实现的功能,所有在Framework中使用的文字和图片资源,无法随着用户设置的语言进行切换,原因在于每个Framework或者项目都有自己的独立Bundle,上一章中,我们只对Bundle.main包进行了处理,所以接下来,我们要对每个Framework的Bundle都进行多语言的处理。

以以下demo为例,建立一个包含2个framework的项目。

在Main.Storyboard和SubRes.Storyboard中,已经设置好文字的中文与英文,此时运行程序可以通过切换IOS设备的语言来实现App的语言切换

在SubRes.Storyboard中,使用MainRes中一张图片arrowblue。

但运行程序后,图片无法显示,原因是ios中,每个不同的framework有着自己默认的bundle,而加载SubRes.Storyboard时,使用的是SubRes的bundle,但是arrowblue存在于MainRes的bundle中,SubRes.Storyboard无法找到这个图片。

此问题的解决办法是在Target-SubRes-BuildPhases-CopyBundleResources中,点击+号,添加MainRes的Assets.xcassets。

这样程序在编译时,会把MainRes的bundle中的资源,复制到SubRes的bundle内,这样程序运行就正常了

我们期待程序使用用户指定的语言而非系统指定的语言,和前几章相同,我们通过实现MyLanguage类来完成此功能,MyLanguage类中,维护了一个bundleDir,保存当前所有framework的bundle,每次用户切换语言,我们更新bundleDir,构造并且记录用户指定语言的bundle。

同时我们必须重定义Bundle类。

最后,我们需要扩展Bundle类,记录当前Bundle的名字,方便通过字典查找。

在AppDelegate中使用MyLanguage

此时,运行程序,可以看到模拟器的语言是英文,但APP中的文字已经成功设置为中文了。

在SubRes实现MyResource类,用于获取此framework中的多语言文字和图片,具体内容前几章有提到,就不多做介绍了


新闻名称:ios开发语言切换,IOS开发语言
当前地址:http://cdkjz.cn/article/hoghpg.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

业务热线:400-028-6601 / 大客户专线   成都:13518219792   座机:028-86922220