最近接了一个项目,需求是要做一款应用的英文版本,客户并不清楚,以为要另做一个APP。沟通后告诉他们在之前应用基础上加个国际化功能就好,把之前的语言国际化重新梳理记录一下。
一般设置更改本地语言环境后,需要重启应用才可以生效,客户那边是要求不能重启应用,必须是切换后立即生效。
首先新建个工程:
接下来要配置你想添加的国际化语言类型:
对应有 XIB 或 Storyboard 文件也对应国际化:
新建 String File,命名为 "InfoPlist" (必须是这个字符串,后缀.strings为默认自带的),用于配置应用名称等信息。
选中 InfoPlist.strings 文件,点击 Xcode 右侧的 Localize 按钮,选择要国际化的语言。
在里面可以对应用名称国际化:
在 English 对应文件中添加:
CFBundleDisplayName = "Internationalization";
在 Chinese (Simplifierd) 添加:
// Localizable App Name是App在中文环境环境下显示的名称 CFBundleDisplayName = "国际化";
这时切换系统语言环境,APP 名称就会对应更改。
接下来是应用内容的国际化:
新建 Localizable.strings,方法同上
在对应的中文和英文文件中添加 需要国际化的内容
"home" = "HomePage"; "service" = "ServicePage"; "account" = "AccountPage";
"home" = "首页"; "service" = "服务"; "account" = "账户";
在应用中使用 NSLocalizedString(@"home", nil)
HomeViewController *homeVC = [[HomeViewController alloc] init]; UINavigationController *homeNC = [[UINavigationController alloc] initWithRootViewController:homeVC]; homeNC.tabBarItem.title = NSLocalizedString(@"home", nil); ServiceViewController *serviceVC = [[ServiceViewController alloc] init]; UINavigationController *serviceNC = [[UINavigationController alloc] initWithRootViewController:serviceVC]; serviceNC.tabBarItem.title = NSLocalizedString(@"service", nil); AccountViewController *accountVC = [[AccountViewController alloc] init]; UINavigationController *accountNC = [[UINavigationController alloc] initWithRootViewController:accountVC]; accountNC.tabBarItem.title = NSLocalizedString(@"account", nil); [self setViewControllers:@[homeNC, serviceNC, accountNC]];
这时切换系统语言环境,就可以对应显示应用内容了。
但是这种必须要重启应用才可以,如果不重启应用
需要重新设置 窗口的 根视图:
效果如下: