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

don*_*ile 58 xcode localization

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

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

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

genstrings -o en.lproj *.m
Run Code Online (Sandbox Code Playgroud)

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

Bri*_*ing 99

一种方法是:

find ./ -name "*.m" -print0 | xargs -0 genstrings -o en.lproj
Run Code Online (Sandbox Code Playgroud)

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

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

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

  • 不要忘记在shell中键入它时,需要引用`*.m`(即`find ./ -name"*.m"...`),否则shell将首先尝试展开它 (8认同)
  • 我找到了如何让它在 Swift 文件上运行。只需将 *.m 替换为 *.swift 即可。它似乎解析命令的 swifts 版本,即。NSLocalizedString("mykey", comment: "comment"); (2认同)

Jon*_*han 89

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

find . -name \*.m | xargs genstrings -o en.lproj
Run Code Online (Sandbox Code Playgroud)

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

find ./ -name "*.m" -print0 | xargs -0 genstrings -o en.lproj
Run Code Online (Sandbox Code Playgroud)

我将上面的原始回复完整保留在上面,以防它无论出于何种原因仍然可以帮助任何人.


SEG*_*SEG 17

这对我有用:

find ./ -name \*.m -print0 | xargs -0 genstrings -o en.lproj
Run Code Online (Sandbox Code Playgroud)

感谢Brian和Uberhamster.


ano*_*eal 7

迅速

find ./ -name \*.swift -print0 | xargs -0 genstrings -o en.lproj
Run Code Online (Sandbox Code Playgroud)

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

find ./ -name \*.swift -print0 | xargs -0 genstrings -o .
Run Code Online (Sandbox Code Playgroud)


Mat*_*att 6

由于没有人发布了同时使用 Objective-C 和 Swift 的解决方案,我想分享一下我是如何做到的。

find ./ -name "*.swift" -print0 -or -name "*.m" -print0 | xargs -0 genstrings -o en.lproj
Run Code Online (Sandbox Code Playgroud)

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

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


Emm*_* Ay 5

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

genstrings -o en.lproj *.m Classes/*.m
Run Code Online (Sandbox Code Playgroud)

..效果很好!

  • @Emmanuel 这是正确的。-a 标志不会附加新字符串 - 它将所有字符串附加到现有的 Localized.strings 文件。 (2认同)

小智 5

不知道是否有人注意到它或该选项后来出现,但是现在有一个-a选项是genstrings。以上选项对我都不起作用。下面是我的解决方案。

find ./ -name "*.m" -exec echo {} \; -exec genstrings -a -o en.lproj {} \;
Run Code Online (Sandbox Code Playgroud)

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

尽管上面的命令可以正常工作,但它并不完全适合我,因为在我的项目文件夹中,有很多文件位于文件夹中,但不包含在xcode项目中。因此,我所做的就是通过解析pbxproj文件创建了项目中使用的文件列表。在filelist.txt中添加了列表,并在命令下方触发

while read f; do find ./ -name "$f" -exec echo {} \; -exec genstrings -a -o en.lproj {} \; ; done < filelist.txt
Run Code Online (Sandbox Code Playgroud)