【问题标题】:BartyCrouch - Base language detectionBartyCrouch - 基础语言检测
【发布时间】:2026-02-21 00:35:02
【问题描述】:

我有一个 Xcode ObjC 项目,在 project.pbxproj 中有以下与语言相关的属性

developmentRegion = English;
knownRegions = ( en, Base, sk, cs, );

Info.plist 也将<key>CFBundleDevelopmentRegion</key> 设置为<string>en</string>。 所有设计器文件(故事板、视图等)都是用英文设计的。

每当我在项目根文件夹中运行 bartycrouch interfaces -p "." 时,我都会更新所有 *.strings 文件,但是设计器文件中的所有字符串都写入 cs.lproj 文件夹中的文件(应该是捷克语是)而不是 en.proj 文件夹。

我的项目有问题吗?或者有没有办法(参数?)为 bartycrouch 指定我的基本语言?

我在项目 GitHub (https://github.com/Flinesoft/BartyCrouch/issues/91) 上打开了一个问题,但两周没有反应,所以我希望我能在这里找到更多的活跃用户。

【问题讨论】:

标签: ios xcode localization interface-builder


【解决方案1】:

我已经在相关的 GitHub 问题上回答了这个问题,但为了完整起见,我也在这里解释一下:

问题说明

当 BartyCrouch 在您的项目中运行时,cs.lproj 中发生的更改摘录如下:

让我们也看看sk.lproj 语言中的相同条目:

乍一看,人们可能会想,为什么 BartyCrouch 要用英文替换正确的捷克语翻译?为什么它不在斯洛伐克语中这样做?

实际情况如下:如果您查看评论,您会发现这两种语言都是一样的。事实上,当第一次在 Xcode 中创建 Strings 文件时,Xcode 会自动从 XIB 或 Storyboard 中获取值并将它们放入 cmets。即使您在 XIB 或 Storyboard 文件中进行更改,它也永远不会更改注释值,从而为每个条目留下三个不同的值:实际值、注释值和 XIB/Storyboard 值。后两者一开始是相同的,但由于 Xcode 不更新它们,所以随着时间的推移它们往往会有所不同。

由于我们可以在评论中看到捷克语的值,我可以假设在您第一次让 Xcode 生成字符串文件时,您的 XIB 或 Storyboard 具有捷克语的值。看来您后来更改了这一点,并使 XIB 或 Storyboard 中的每个值都使用英语。 BartyCrouch 有一个内置功能,可以自动为您更新评论值。这就是为什么我们看到上述两种示例语言的注释行发生了变化。 BartyCrouch 的一个附加功能是——如果评论值与真实值完全匹配——也会更新真实值。由于捷克语翻译的实际值与评论值相同,这就是这里发生的情况,也是 BartyCrouch 更新该值并将其替换为它在 XIB 或 Storyboard 文件中找到的新英文值的原因。

解决方案

现在我们知道问题出在哪里,让我们来看看可以采取哪些措施来解决这个问题和/或在未来防止它:

  1. 要防止此问题再次发生,请从一开始就在 XIB 或 Storyboard 文件中使用英语(或任何语言),并且永远不要更改语言。
  2. 但是,当语言发生更改时,一种手动修复方法是手动将注释值更新为新语言。例如:
/* Class = "UILabel"; text = "Proveďte synchronizaci."; ObjectID = "RvR-Nz-aYE"; */

需要手动改成

/* Class = "UILabel"; text = "Sync to get data."; ObjectID = "RvR-Nz-aYE"; */
  1. 或者,您也可以让 BartyCrouch 完成它的工作并手动恢复一次错误的更改(尽管保留评论更改!)。从那时起(只要您不再更改语言)该问题不应该再次发生。这是我建议您解决此问题的方法 - 在 Git GUI 工具(如 SourceTree)的帮助下,这不会花费很长时间。

希望我能帮上忙。

【讨论】: