iOS --- 多语言适配的注意事项
来源:互联网 发布:java 程序员速成班 编辑:程序博客网 时间:2024/05/16 08:59
关于iOS APP的国际化适配,主要有以下几点:
Localizable.strings文件
该文件主要用于字符串的多语言版本,包括Localizable.string(English), Localizable.strings(Chinese(Simplified)), Localizable.strings(Chinese(Traditional))等多个版本。内容格式如下:
// Localizable.string(English)"GUI_TEXT_CANCEL" = "Cancel";//取消"GUI_TEXT_BACK" = "Back";//返回"GUI_TEXT_SEND" = "Send";//发送
// Localizable.strings(Chinese(Simplified))"GUI_TEXT_CANCEL" = "取消";//取消"GUI_TEXT_BACK" = "返回";//返回"GUI_TEXT_SEND" = "发送";//发送
storyboard和xib文件
Main.storyboard也会有多个版本,最重要的就是Base版本,即当前开发者使用语言的版本(如简体中文)。Main.storyboard(Base)文件与常见的Main.storyboard文件无异,其相应文字已在Main.storyboard中标记。
另外,会有Main.strings(English), Main.strings(Chinese(Traditional))版本的两个文件。格式如下:
// Main.strings(English)/* Class = "UITextField"; placeholder = "新密码"; ObjectID = "G9J-mp-XNR"; */"G9J-mp-XNR.placeholder" = "New password";/* Class = "UITextField"; placeholder = "原密码"; ObjectID = "LbQ-a8-5ly"; */"LbQ-a8-5ly.placeholder" = "Old password";/* Class = "UITextField"; placeholder = "手机号码"; ObjectID = "LrI-zH-3OD"; */"LrI-zH-3OD.placeholder" = "Phone number";
// Main.strings(Chinese(Traditional))/* Class = "UITextField"; placeholder = "新密码"; ObjectID = "G9J-mp-XNR"; */"G9J-mp-XNR.placeholder" = "新密碼";/* Class = "UITextField"; placeholder = "原密码"; ObjectID = "LbQ-a8-5ly"; */"LbQ-a8-5ly.placeholder" = "原密碼";/* Class = "UITextField"; placeholder = "手机号码"; ObjectID = "LrI-zH-3OD"; */"LrI-zH-3OD.placeholder" = "手機號碼";
这两个Main.strings文件的格式是自动生成的,我们仅需对应调整其中的placeholder文字即可,步骤请参考Main.storyboard的国际化。其中的OjbectID是唯一对应于一个UI控件的。
xib文件的国际化同Main.storyboard,不再赘述。
图片等资源
最直接的方法,可以准备三个图片, 在Localizable.strings中指定.:
"imageName" = "ilike_en";
然后代码中使用
[_imageView setImage:[UIImage imageNamed: NSLocalizedString(@“imageName”, nil)]];
即可.
对于图片的命名,可采用hello_en@2x.png之类的规则。
获取当前语言类型
通常涉及到国际化,我们会先判断当前使用的语言类型。
获取iOS系统的语言类型可使用:
NSArray *languages = [NSLocale preferredLanguages]; // 获取语言字段NSString *curLanguage = [languages firstObject]; // 获取当前使用语言
对于curLanguage的值,iOS9在其中增加了地区代码。如简体中文,在iOS9之前为@”zh-Hans”,而在iOS9中为@”zh-Hans-CN”。所以iOS9之前的一些判断如
[curLanguage isEqualToString:@"zh-Hans"]
在iOS9之后就会有问题,可使用
[curLanguage hasPrefix:@"zh-Hans"]
来代替。如下:
// 当前语言是否中文简体-#define isZhHans [[[NSLocale preferredLanguages] firstObject] isEqualToString:@"zh-Hans"]+#define isZhHans [[[NSLocale preferredLanguages] firstObject] hasPrefix:@"zh-Hans"] // 当前语言是否为中文繁体-#define isZhHant [[[NSLocale preferredLanguages] firstObject] isEqualToString:@"zh-Hant"]+#define isZhHant [[[NSLocale preferredLanguages] firstObject] hasPrefix:@"zh-Hant"] // 当前语言是否为中文繁体香港-#define isZhHK [[[NSLocale preferredLanguages] firstObject] isEqualToString:@"zh-HK"]+#define isZhHK [[[NSLocale preferredLanguages] firstObject] hasPrefix:@"zh-HK"]
获取地区代码
NSLocale *locale = [NSLocale currentLocale];[locale localeIdentifier];
获取Localizable.strings中内容
NSString *text = NSLocalizedString(@"GUI_TEXT_BACK", @"返回");
多语言的布局适配
比如,按钮的标题在多语言的布局下可能导致布局出现问题。最简单的做法通常是
btn.titleLabel.adjustsFontSizeToFitWidth = YES;
- iOS --- 多语言适配的注意事项
- ios 的socket 注意事项
- ios多语言适配
- iOS多语言适配
- c语言的一些注意事项!
- c语言的一些注意事项
- Java语言的一些注意事项
- 编写C语言的注意事项
- delphi语言转为bcb语言的注意事项
- ios set方法的注意事项
- ios证书配置的注意事项
- iOS AppsFlyer的使用注意事项
- IOS的APP上线注意事项
- iOS ARC的使用注意事项
- iOS导航控制器的注意事项
- iOS开发时的注意事项
- iOS UICollectionViewCell 的 contentView 注意事项
- iOS巅峰之iPhone适配的相关内容以及机型适配时的注意事项
- thinkphp学习笔记1
- 再谈工科研究生如何做研究
- Foundation框架之可变和不可变
- 深度学习(DL)与卷积神经网络(CNN)学习笔记随笔-04-基于Python的LeNet之MLP
- Log4j官方文档翻译(八、文件输出)
- iOS --- 多语言适配的注意事项
- css多个class时的选择器用法
- 归并排序(链表结构)
- unity简易小地图的实现(NGUI)
- 【数据结构】线性结构:栈&队列&数组
- c++primer plus第十七章-输入和输出概述
- 值得深思的连续赋值--赋值运算符运算顺序
- java解析XML配置文件及log4j开源日志系统
- 第三章:数据结构与算法javascript描述: 列表