genstrings
适用于从.m文件中提取可本地化的内容,因为,
find . -name \*.m | xargs genstrings -o en.lproj
但是,不适用于.swift文件,
find . -name \*.swift | xargs genstrings -o en.lproj
就我而言,genstrings
工具可以很好地工作。这是我的测试:
// MyClass.swift
let message = NSLocalizedString("This is the test message.", comment: "Test")
然后,在类的文件夹中
# generate strings for all swift files (even in nested directories) $ find . -name \*.swift | xargs genstrings -o . # See results $ cat Localizable.strings /* Test */ "This is the test message." = "This is the test message."; $
我们编写了一个适用于Swift文件的命令行工具,并合并了apple genstrings
工具的结果。它允许在key
中使用value
和NSLocalizedString
我相信genstrings
按预期工作,但Apple的xargs
方法从您的所有项目文件生成字符串是有缺陷的,并没有正确解析包含空格的路径。
这可能是它不适合你的原因。
尝试使用以下内容:
find . -name \*.swift | tr '\n' '\0' | xargs -0 genstrings -o .
有一个名为SwiftGenStrings的替代工具
Hello.swift
NSLocalizedString("hello", value: "world", comment: "Hi!")
SwiftGenStrings:
$ SwiftGenStrings Hello.swift
/* Hi! */
"hello" = "world";
Apple String:
$ genstrings Hello.swift
Bad entry in file Hello.swift (line = 1): Argument is not a literal string.
免责声明:我参与了SwiftGenStrings。
这里有一个类似的问题:How to use genstrings across multiple directories?
find ./ -name "*.m" -print0 | xargs -0 genstrings -o en.lproj