环境配置
- Mac Sonoma 14.5
- Xcode Version 15.4 (15F31d)
情景复现
因为我有一款“存钱猪猪”应用,目前还是初版。然后我打算推翻现有的内容,重新梳理这款软件的架构,其中比较重要的操作是删除了之前的文件,包括本地化问题、View等等问题。
删除后,重新实施本地化时,发现失效了。
我在配置Localizable文件时,我原本是默认中文,为了更好的推广应用,改为英文,并配置了简体中文的应用名称以及应用内容,但是应用无论如何都只显示英文的应用名称和内容。
好在,我之前提交到Github上了代码,我把之前的版本拉过来,进行问题的排查。
问题排查
首先是将新版本的代码复制到旧版本上,发现旧版本的本地化是正常的,虽然我在新版本中添加了lottie动画、渐变色等效果,但在旧版本上都能复现。
随后,开始对比参数,发现各项参数都是正常的,我甚至怀疑因为我改新版本时,调整了iOS最低的支持版本导致的问题,修改了支持版本仍然报错。
经过一上午的反复比较,发现旧版本和新版本的Localizable文件的命名不一样的,因为新版本为了做区分,将String Catalog类型的文件命名为LocalizableCatalog,将String File(Legacy)类型的文件命名为LocalizableLegacy。
然后我尝试修改新版本的String File(Legacy)文件的命名,将其改为旧版本的名称,本地化效果重新实现。
(本地化文件改为旧名称,本地化效果实现)
(本地化文件改为非旧名称,本地化效果失效)
经过几次测试,发现问题就是存在于本地化文件命名的问题。
这个文件影响了应用的本地化文件名称。
除此之外,另一个String Catalog文件也存在本地化失效的问题,我以为是String File(Legacy)是这个BUG间接导致的String Catalog文件的失效,然后我将现有的String Catalog文件删除后,重新创建String Catalog,发现还是本地化失效。
然后,我默默的将String Catalog类型文件改为旧版本的命名,应用内容的本地化效果实现。
(本地化文件改为旧名称,本地化效果实现)
(本地化文件改为非旧名称,本地化效果失效)
总结
经过了一个上午的仔细排查,问题出在本地化文件的命名,问题的原因可能为Xcode的BUG,在Xcode项目开始创建Localizable文件后,Xcode会将创建的Localizable文件的命名作为常量进行存储。如果后面修改了这个文件的命名,本地化效果就会失效。
以上是我在排查Xcode本地化失效问题时,自我作出的总结,也可能是其他字段导致的问题。
每遇到一个BUG,就会耽误我很长的一段开发进度,都2024年了,有时还是会出现莫名其妙的闪退,应该好好修一修Xcode,另外对于支持版本的事,我也发现很多特性都是iOS 14 或者iOS 15才能使用,如果不设置最低的支持版本,可能本地化的功能都实现不了,根本不考虑向下兼容的事。