genstrings
可以很好地从.m文件中提取可本地化的内容,
find . -name \*.m | xargs genstrings -o en.lproj
但是,不适用于.swift文件,
find . -name \*.swift | xargs genstrings -o en.lproj
答案 0 :(得分:29)
就我而言,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."; $
答案 1 :(得分:4)
我们编写了一个适用于Swift文件的命令行工具,并合并了apple genstrings
工具的结果。
它允许key
value
和NSLocalizedString
答案 2 :(得分:2)
我相信.dropdown-menu-right {
right:0;
left:auto;
}
按预期工作,但Apple的genstrings
方法从您的所有项目文件生成字符串是有缺陷的,无法正确解析包含空格的路径。
这可能是它不适合你的原因。
尝试使用以下内容:
xargs
答案 3 :(得分:0)
还有一个名为SwiftGenStrings
的替代工具Hello.swift
NSLocalizedString("hello", value: "world", comment: "Hi!")
SwiftGenStrings:
$ SwiftGenStrings Hello.swift
/* Hi! */
"hello" = "world";
Apple genstrings:
$ genstrings Hello.swift
Bad entry in file Hello.swift (line = 1): Argument is not a literal string.
免责声明:我曾参与过SwiftGenStrings。
答案 4 :(得分:0)
这里有一个类似的问题: How to use genstrings across multiple directories?
class CustomAdapter(val items: ArrayList<Item>, val isVertical: Boolean = false): RecyclerView.Adapter<CustomViewHolder>() {
override fun onCreateViewHolder(p0: ViewGroup, p1: Int): CustomViewHolder {
val view = LayoutInflater.from(p0.context).inflate(R.layout.item_layout, p0, false)
if (isVertical) {
view.setLayoutParams(ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT))
}
return CustomViewHolder(view)
}
}
答案 5 :(得分:0)
我在find/genstrings
上遇到的问题是双重的:
find
的输出生成)时,它将退出并出现错误要解决这两个问题,我正在使用以下方法:
find Some/Path/ \( -name "*.swift" ! -name "MyExcludedFile.swift" \) | sed "s/^/'/;s/$/'/" | xargs genstrings -o . -s MyCustomLocalizedStringRoutine
总而言之,我们使用find
命令来查找和排除您的Swift文件,然后将结果通过管道传递到sed
命令中,该命令会将每个文件路径包装在引号,然后最终将结果通过管道传递到genstrings
命令
答案 6 :(得分:0)
Xcode现在包括一个用于提取本地化功能的强大工具。
只需在左侧选择您的项目,然后在“编辑器”菜单>>“导出本地化”中即可。
您将获得一个文件夹,其中包含文件中的所有文本以及Localizable.strings
和InfoPlist.strings