swift文件的genstrings问题

时间:2014-10-13 13:03:26

标签: objective-c swift localization xcode6

genstrings可以很好地从.m文件中提取可本地化的内容,

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

但是,不适用于.swift文件,

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

7 个答案:

答案 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

中的valueNSLocalizedString

https://github.com/KeepSafe/genstrings_swift

答案 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上遇到的问题是双重的:

  1. 当到达带有空格的文件夹名称(由find的输出生成)时,它将退出并出现错误
  2. 当它到达我定义了自定义例程的文件时,尝试解析我的实际函数定义时给我一个错误

要解决这两个问题,我正在使用以下方法:

find Some/Path/ \( -name "*.swift" ! -name "MyExcludedFile.swift" \) | sed "s/^/'/;s/$/'/" | xargs genstrings -o . -s MyCustomLocalizedStringRoutine

总而言之,我们使用find命令来查找和排除您的Swift文件,然后将结果通过管道传递到sed命令中,该命令会将每个文件路径包装在引号,然后最终将结果通过管道传递到genstrings命令

答案 6 :(得分:0)

Xcode现在包括一个用于提取本地化功能的强大工具。

只需在左侧选择您的项目,然后在“编辑器”菜单>>“导出本地化”中即可。

您将获得一个文件夹,其中包含文件中的所有文本以及Localizable.stringsInfoPlist.strings

此处有更多详细信息: https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPInternational/LocalizingYourApp/LocalizingYourApp.html