BartyCrouch - 基础语言检测

时间:2018-03-29 12:48:58

标签: ios xcode localization interface-builder

我有一个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)上打开了一个问题但两周没有反应,所以我希望我能在这里找到更多活跃用户。

1 个答案:

答案 0 :(得分:1)

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

问题说明

以下是BartyCrouch在您的项目中运行时cs.lproj中发生的更改的摘要: enter image description here

让我们也用语言sk.lproj看一下相同的条目: enter image description here

乍一看,人们可能会想到,为什么BartyCrouch用英语替换了正确的捷克语翻译?为什么不使用斯洛伐克语呢?

正在发生的事情:如果您看一下注释,您会注意到两种语言都是相同的。实际上,当第一次在Xcode中创建Strings文件时,Xcode会自动从XIB或Storyboard中获取值并将其放入注释中。即使您在XIB或Storyboard文件中进行更改,它也永远不会更改注释值,从而使每个条目具有三个不同的值:实际值,注释值和XIB / Storyboard值。最初,后两者是相同的,但是由于Xcode不会更新它们,因此它们会随着时间的流逝而有所不同。

由于我们看到注释中的值是捷克语,因此我可以假设在您第一次让Xcode生成Strings文件时,您的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),此过程不会花费很长时间。

希望我能帮上忙。