iOS

iOS Internationalization Guidelines

Posted by 无北 on March 24, 2016

iOS Internationalization Guidelines

文本

主要使用下述两个宏命令实现文本的国际化。 LocalizedStr用于固定文本的国际化,FormattedString用于需要拼接的文本的国际化。

#define LocalizedStr(key)   		NSLocalizedString(key, @"")
#define FormattedString(fmt,...) 	[NSString localizedStringWithFormat:LocalizedStr(fmt),##__VA_ARGS__]

例如:

XXX.m

UIButton* btn = [UIButton new];
[btn setTitle:LocalizedStr(@"common.genderPicker.btn.confirm")  forState:UIControlStateNormal];

UIAlertView* alertView = 
  [UIAlertView customAlertViewWithTitle:LocalizedStr(@"com.spaceAlert.title")
                                message:FormattedString(@"com.spaceAlert.prompt",quota,used,quota-used)
                      cancelButtonTitle:LocalizedStr(@"com.btn.cancel")
                                  click:^(NSString *clickBtnTitle) {
                                  ...
                                  }
                      otherButtonTitles:LocalizedStr(@"com.btn.ok"), nil];

Localizable.strings

com.btn.cancel 					= "取消";
com.btn.ok						= "OK";

...

com.spaceAlert.title 			= "存储空间";
com.spaceAlert.message 			= "您的云存储空间目前已使用 %2$.2f GB,剩余 %3$.2f GB。";

命名

strings文件内的文本标识符使用命名空间的规则进行命名。

模块名.组件名.类型(btn,prompt,title,lab…).状态(OR 备注)

图片

UI图片统一使用[UIImage imageNamed:imageName]方法获取图片。

withMe工程已混淆该方法,调用该方法在LocalizedStr(imageName)存在时等价于[UIImage imageNamed:LocalizedStr(imageName)]