如何在多个目录中使用genstrings?

时间:2010-04-30 12:15:59

标签: xcode localization

我有一个目录,它有很多子目录。那些子市场有时甚至有子市场。里面有源文件。

我如何使用genstrings来遍历所有这些dirs和subdirs?

假设我在终端中cd到我的根目录,然后我会输入:

genstrings -o en.lproj *.m

我怎么能告诉它现在看看所有这些目录?或者我是否必须添加许多相对路径逗号分隔?如何?

13 个答案:

答案 0 :(得分:96)

一种方法是:

find ./ -name "*.m" -print0 | xargs -0 genstrings -o en.lproj

xargs是一个很好的shell-foo。它将在标准中使用字符串并将它们转换为下一个函数的参数。这将使用当前目录下的每个.m文件填充genstrings命令。

这个答案在使用的路径中处理空格,因此它更加健壮。您应该使用它来避免在处理源文件时跳过文件。

编辑:正如评论和其他答案所述,* .m应该被引用。

答案 1 :(得分:88)

我不确切知道为什么,但Brian的命令对我不起作用。这样做了:

find . -name \*.m | xargs genstrings -o en.lproj

编辑: 好吧,当我最初写这篇文章时,我很匆忙,只需要一些有用的东西。在使用上面接受的答案时,我发生的问题是必须引用“* .m”(好奇的人可以在Brian King的答案评论中找到解释为什么会出现这种情况)。我认为最好的解决方案是使用引用的相应位来使用原始答案,然后读取:

find ./ -name "*.m" -print0 | xargs -0 genstrings -o en.lproj

我原来的答案完整无遗,但是如果它仍然以任何理由帮助任何人。

答案 2 :(得分:17)

这对我有用:

find ./ -name \*.m -print0 | xargs -0 genstrings -o en.lproj

感谢Brian和Uberhamster。

答案 3 :(得分:5)

不确定是否有人注意到它或后来的选项,但现在有一个-a选项是genstrings。上述选项均不适合我。以下是我的解决方案。

find ./ -name "*.m" -exec echo {} \; -exec genstrings -a -o en.lproj {} \;

这也将打印读取的文件的名称。

虽然上面的命令运行正常,但对我来说并不完全正确,因为在我的项目文件夹中有许多文件位于文件夹中但未包含在xcode项目中。所以我做的是,通过解析pbxproj文件创建了我的项目中使用的文件列表。在filelist.txt中添加了列表,并在命令

下面触发
while read f; do find ./ -name "$f" -exec echo {} \; -exec genstrings -a -o en.lproj {} \; ; done < filelist.txt

答案 4 :(得分:3)

我刚刚添加了genstrings命令的另一条路径,如下所示:

genstrings -o en.lproj *.m Classes/*.m

..它运作得很好!

顺便说一下。关于genstrings的一个方便的事情。当您继续开发应用程序时,genstrings有一个-a开关,可以将新字符串附加到本地化的字符串文件。

答案 5 :(得分:3)

我在.mm文件中有很多代码,所以我必须使用:

find . -name \*.m -or -name \*.mm | xargs genstrings

或其他变体,例如

find . -name \*.m -or -name \*.mm | xargs -0 genstrings -o en.lproj

答案 6 :(得分:2)

以下改进了以前的答案,这将找到.h和.m文件:

find ./ -name *.h -print0 -o -name *.m -print0 | xargs -0 genstrings -o en.lproj

答案 7 :(得分:2)

由于没有人发布过Objective-C和Swift的解决方案,我会分享我是如何做到这一点的。

find ./ -name "*.swift" -print0 -or -name "*.m" -print0 | xargs -0 genstrings -o en.lproj

通过使用它,您的可本地化字符串文件将被swift和objective-c文件中的字符串替换。

编辑: 您需要cd到包含所有子目录的目录。

答案 8 :(得分:1)

我在为文件夹结构生成字符串文件时遇到问题,其中某些文件夹的名称中包含空格。

我在这个网站上找到了一个很好的解决方案:http://riveroften.com/generate-localizable-strings-file-with-genstrings/

find . -name "*.m" -print0 | xargs -0 genstrings -o "en.lproj"

答案 9 :(得分:1)

斯威夫特

find ./ -name \*.swift -print0 | xargs -0 genstrings -o .en.lproj

如果您需要同一文件夹中的文件

find ./ -name \*.swift -print0 | xargs -0 genstrings -o .

答案 10 :(得分:0)

find ./ -name“* .m”-print0 | xargs -0 genstrings -o en.lproj

这将使用每个.m文件将genstrings命令填充到当前目录。然后在Localizable.string文件中创建NSLocalizedString()“key / context”,它可以在项目的任何位置使用。

答案 11 :(得分:0)

要扫描所有.m文件,请执行以下操作: 在根文件夹中运行此

genstrings ./**/*.m

答案 12 :(得分:-1)

试试这个

genstrings -o English.lproj ./Classes/*.m ./Classes/*.h ./Classes/subclass/*.m

如果子文件夹不是太多,这将完美地运作。