iOS 国际化多语言(上)
2021-09-13 本文已影响0人
卟过尔尔
前言
这里介绍的方法只是根据系统语言变化
demo
iOS 国际化多语言(下)
配置
首先打开project下的info文件 在Localizations里面选择你想要的语言,添加->完成

Info.plist国际化
- APP名称国际化,新建一个Strings File 文件
(iOS->Resource->Strings File)
新建String File 文件
注意:文件名必须是InfoPlist.strings
取名必须InfoPlist 选择这个文件,右边点击Localize,会弹出一个对话框,展开对话框列表,发现下拉列表所展示的语言正是我们在上面配置的需要国际化的语言,选择我们需要本地化的语言,然后点击对话框的Localize按钮。
点击Localize
选择语言
选择语言
//英文
//书写方法一 修改APP桌面名称
CFBundleDisplayName = "LanguageManager";
//书写方法二 获取麦克风权限
"NSMicrophoneUsageDescription" = "Need to obtain microphone permission";
//中文
//书写方法一 修改APP桌面名称
CFBundleDisplayName = "国际化语言";
//书写方法二 获取麦克风权限
"NSMicrophoneUsageDescription" = "需要获取麦克风权限";
注意:上述2种书写方法,key不带" "符号是在英文情况下,如果是中文key会识别不出来
获取Info.plist文件中key的方法:选中Info.plist-->右键选中Open As-->Source Code
注意:选中Property List 恢复列表样



代码中语言国际化
- Localizable文件创建
(iOS->Resource->Strings File)
,与上面的步骤一样的,然后在不同文件里设置不同语言的文本。新建Localizable文件
编辑对应中英文件
//使用方法 NSLocalizedString(@"Chinese", nil)
- (UIButton *)btOne{
if (!_btOne) {
_btOne = [UIButton buttonWithType:(UIButtonTypeCustom)];
[_btOne setTitle:NSLocalizedString(@"Chinese", nil) forState:(UIControlStateNormal)];
[_btOne setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
_btOne.titleLabel.font = [UIFont systemFontOfSize:20];
_btOne.frame = CGRectMake(50, 50, 100, 50);
[_btOne addTarget:self action:@selector(clickBTone:) forControlEvents:(UIControlEventTouchUpInside)];
[self.view addSubview:_btOne];
}
return _btOne;
}
注意: 如果创建.strings文件是自定义的名字的话,如Internation.strings,那么调用的方式为: NSLocalizedStringFromTable(@”English”,@”Internation”, nil) NSLocalizedStringFromTable(@”Authority”,@”Internation”, nil) 当自定义名字后,使用NSLocalizedString的方式不起作用,这里要特别注意,注意,注意!!!(重要的说三遍);
StoryBoard设置
-
storyboard同Localizable.strings类似。当我们创建Localizable.strings对应的语言文件时,系统自动生成了storyboard对应的系统文件。假如我们在storyboard拖入了一个UILabel,我们想要直接在这里设置label的文本,这里就要用到了UILabel的Object ID了。
拖入一个UILabel
编辑对应中英文件
图片设置
-
方法一,图片设置也和Localizable.strings相似,图片资源存放在Images.xcassets里,使用时将不一样语言的图片资源在Localizable.strings里一一对应设置;
放入中英文图片
//在中文Localizable.strings文件中:
imageName = "ChineseImage";
//在英文Localizable.strings文件中:
imageName = "EnglishImage";
//代码中使用
- (UIImageView *)imageOne{
if (!_imageOne) {
_imageOne = [[UIImageView alloc] initWithFrame:CGRectMake(50, 250, 100, 100)];
_imageOne.image = [UIImage imageNamed:NSLocalizedString(@"imageName", nil)];
[self.view addSubview:_imageOne];
}
return _imageOne;
}
-
方法二,选中图片,点击右侧属性的Localization,选中语言文件。
选中Localization
选择语言 并且在项目文件夹中会出现en.lproj文件和zh-Hans.lproj文件。en.lproj文件存放的是英文版图片,zh-Hans.lproj存放的是中文版图片,中英文图片名字一样,我们在文件夹中直接替换图片就可以了。
替换对应图片
应用内大额数字的国际化
大额数字,在不同的语言中,表现形式可能不一样。比如100w,在英语中是“1,000,000”这样表示;而在西班牙语中表示为“1.000.000”;想实现大额数字显示的国际化,可以按照如下步骤:
// 数字国际化
- (UILabel *)lbThree{
if (!_lbThree) {
_lbThree = [[UILabel alloc] init];
_lbThree.frame = CGRectMake(250, 200, 100, 50);
_lbThree.font = [UIFont systemFontOfSize:20];
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
NSString *numberString = [numberFormatter stringFromNumber:@(-1000000)];
_lbThree.text = numberString;
[self.view addSubview:_lbThree];
}
return _lbThree;
}
目前根据查阅资料只想到了这些,如果还有其它的或更好的方法,希望大家能多留言告知,后续也会更新~~~