You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

纯代码实现Auto Layout的Obj-C iOS App是否需开启Base Internationalization?

纯代码Objective-C应用的国际化指南(无需Base Internationalization)

嘿,我太懂你这种情况了——全程纯代码撸Auto Layout,连个storyboard或者xib的影子都没有,现在要做国际化,结果搜出来一堆资料都在说要开Base Internationalization,这玩意儿跟你的应用完全不搭对吧?别慌,你的路子其实走对了,而且纯代码的国际化反而比用界面文件的情况更直接!

首先得明确:Base Internationalization是专门给storyboard/xib设计的,用来把界面里硬编码的字符串分离到strings文件里。你纯代码开发的话,完全不需要开启这个功能,直接专注于NSLocalizedString相关的配置就好。

第一步:创建本地化字符串文件

  • 右键项目目录 → 选择「New File」
  • 在iOS模板里找到「Strings File」,命名为Localizable.strings(这个是默认文件名,NSLocalizedString会自动找它,除非你要自定义本地化bundle,否则别乱改)
  • 选中刚创建的Localizable.strings,在右侧「File Inspector」面板里找到「Localizations」板块,点击「Localize...」,选你想用的基础语言(比如English)

第二步:添加要支持的目标语言

  • 回到项目设置的「Info」标签页,找到「Localizations」区域,点击左下角的「+」号,选择你要添加的语言(比如简体中文、日语等)
  • 弹出的对话框里,Localizable.strings会被自动选中,直接点「Finish」就行,这样每个语言都会生成对应的Localizable.strings文件(存放在各自的.lproj文件夹里)

第三步:填充本地化内容

每个语言的Localizable.strings文件都遵循"key" = "本地化文本";的格式来写:
比如英文版本(en.lproj/Localizable.strings):

"welcome_msg" = "Welcome to My App!";
"btn_login" = "Login";
"hint_input_name" = "Please enter your username";

简体中文版本(zh-Hans.lproj/Localizable.strings):

"welcome_msg" = "欢迎来到我的应用!";
"btn_login" = "登录";
"hint_input_name" = "请输入你的用户名";

第四步:在代码里正确使用NSLocalizedString

你之前已经在调用NSLocalizedString了,确保格式正确就好:

// 用key获取对应语言的文本,第二个参数是给翻译人员看的注释
NSString *welcomeText = NSLocalizedString(@"welcome_msg", @"首页的欢迎提示语");
UILabel *welcomeLabel = [[UILabel alloc] init];
welcomeLabel.text = welcomeText;

// 给按钮设置本地化标题
UIButton *loginBtn = [UIButton buttonWithType:UIButtonTypeSystem];
[loginBtn setTitle:NSLocalizedString(@"btn_login", @"登录按钮的标题") forState:UIControlStateNormal];

实用小技巧:如果你的代码里有大量NSLocalizedString,可以用genstrings命令行工具自动提取key和注释,生成基础的strings文件,省得手动敲。在项目根目录执行:

genstrings -o en.lproj *.m

这个命令会扫描所有.m文件,把所有NSLocalizedString的内容提取出来,生成en.lproj下的Localizable.strings

第五步:测试本地化效果

  • 快速测试:在Xcode里打开「Edit Scheme」→「Run」→「Options」,找到「Application Language」,选择你添加的语言,运行应用就能看到效果
  • 真实场景测试:在设备的「设置」→「通用」→「语言与地区」里切换系统语言,重启应用查看

额外注意事项

  • 如果有图片需要本地化(比如不同语言的引导图),可以给每个语言创建对应的.lproj文件夹,把图片放进去,代码里直接用图片名加载,系统会自动根据当前语言匹配对应图片
  • 要是你需要自定义本地化逻辑(比如从服务器下载语言包),可以自己创建NSBundle对象来加载指定的strings文件,但大部分纯代码应用用默认的系统逻辑就足够了

放心,你这种纯代码的方式其实是国际化里最灵活的,完全不需要依赖Base Internationalization那个针对界面文件的功能,只要把Localizable.strings配置好,代码里正确调用NSLocalizedString就搞定了!

内容的提问来源于stack exchange,提问作者Gallymon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:17:32