【问题标题】:Extract texts from XIB files for translation in human readable way从 XIB 文件中提取文本以便以人类可读的方式进行翻译
【发布时间】:2013-10-25 23:33:25
【问题描述】:

ibtool 是从 XIB 文件中提取字符串的工具。示例命令:

find . -name \*.xib | xargs -t -I '{}' ibtool --generate-strings-file '{}'.strings.txt '{}'

但是 ibtool 生成的输出对于“正常”(阅读:非开发人员)人类来说是不可读的。

例子:

/* Class = "IBUILabel"; text = "Regards:"; ObjectID = "201"; */
"201.text" = "Regards:";

它的问题很少(从翻译者的角度来看);

  1. 这种格式不同于 Localizable.strings 所期望的格式。
  2. 它混淆了要翻译哪些文本:a)这个在注释行中,b)一个在未注释行中,c)或者两者都可能
  3. 只是杂乱无章。

我需要以Localizable.strings 格式提取的XIB 字符串(使用genstrings 从NSLocalizableString 宏中提取的字符串:

 "key"="to translate";

有没有办法让 ibtool 以这种方式输出文本?

【问题讨论】:

  • 您说得对,生成的格式是一场噩梦。认为我们被钥匙困住了,因为这就是它在内部匹配的东西。我发现一个杀手是输出的顺序是由(随机)键按字母顺序排列的 - 这与字符串出现在界面中的位置没有对应关系,因此很难理解。除非我遗漏了什么,否则 ibtool 似乎不能只将新字符串附加到手动重组和注释的文件中(这可能会有所帮助)。拥有一个通用应用程序意味着发送两个包含基本相同字符串的同样不可读的文件。
  • @RobGlassey 我在下面发布了工作脚本。

标签: iphone localization translation xib libtool


【解决方案1】:

我用 bash 编写了自己的脚本,它执行以下操作:

  1. 从目录中的所有xib文件中提取所有字符串
  2. 将其转换为 .strings 格式(由NSLocalizableString 宏所期望)。 "text to translate"="text to translate"; 译者可以直接使用。只有右边,=后引号内的文字需要编辑。
  3. 删除重复项(我同意 - 有时这不是最好的主意,因为翻译可能会因上下文而异)
  4. 去除 cmets(只留下汁液)
  5. 按字母顺序排序(可选)
  6. 将结果保存到 1 个输出文件(全部合并并准备好翻译)

脚本并不完美,但效果很好。

这里有点太长了(90行),所以这里是直接的GitHub链接:

https://github.com/lukaszmargielewski/extract-strings-from-xib-files/blob/master/extract-strings-from-xib-files.sh

【讨论】:

  • 有趣。我采取了不同的策略,其中涉及更多(很多)手动工作来设置和更新(使用我们自己的键有效地创建一个“主”.strings 文件,然后映射到 iPhone/iPad IB 键上)。这为翻译器提供了一个可读的文件,如果它们相同,则不会重复 iPhone/iPad 字符串,并使用正确的 IB 密钥为每种语言生成可读的 .strings 文件——尽管保留了我们的排序和 cmets。这有点令人费解,我还没有完成,但我相信一旦完成初始设置,它将是可维护的。让我们看看它是否有效。
猜你喜欢
  • 2012-12-17
  • 2014-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-08
  • 2013-11-07
  • 2012-12-02
  • 1970-01-01
相关资源
最近更新 更多