如何自动生成Localizable.strings列表

时间:2017-10-27 18:16:53

标签: ios swift xcode

我正在创建快速的应用程序。它包含Localizable.strings文件中的一些字符串。每当我想使用它时,我需要通过它的id来获取它。一开始我用它们创建了一个枚举,但每次添加新文本时手动添加它都有点烦人。 我试图简化这个过程,并在xcode构建阶段添加新的脚本阶段。这个脚本为我创建字符串扩展类,然后逐行读取可本地化的文件,在引号之间查找单词并将其转换为字符串变量。一般来说,它看起来如下:

echo "
import Foundation

extension String {

    " > Classes/Constants/StringId.swift



while IFS= read -r line;do

PREFIX="static var"
VAR_NAME=`echo $line| awk -F \" '{print $2}'`
SUFFIX_1=": String {
get {
    return String.from(core: \"$VAR_NAME\")
}}"
SUFFIX_2="\""

if [ -z "$VAR_NAME" ]
then
echo "empty"
else
echo "$PREFIX lib_$VAR_NAME $SUFFIX_1"  >> Classes/Constants/StringId.swift
fi
done < Resources/Base.lproj/Localizable.strings

其中String.from ...是从正确的资源文件中获取字符串的内部方法(如通用字符串,可访问性字符串或可品牌字符串)。

结果我有一个具有以下结构的类:

import Foundation

    extension String {


    static var lib_author_website : String {
    get {
        return String.from(core: "author_website")
    }}
    static var lib_author_name : String {
    get {
        return String.from(core: "author_name")
    }}
    static var lib_app_name : String {
    get {
        return String.from(core: "app_name")
    }}
}

最后我可以调用字符串:

label.text = String.lib_app_name

这只是我的想法,但我需要自己制作所有这些,所以我只是好奇是否有更好或更受欢迎的解决方案呢?我打算对资产名称和故事板做同样的事情,但也许有更好的方法来处理这个问题?

2 个答案:

答案 0 :(得分:2)

dr_barto是对的。您需要使用pod:https://github.com/SwiftGen/SwiftGen

我的例子

详细

xCode 9.0.1,Swift 4

代码

  

Podfile

target 'stackoverflow-46981208' do
  use_frameworks!
  pod 'SwiftGen'
end
  

运行脚本

 TemplatePath=$PODS_ROOT/SwiftGen/templates
 LocalizablePath=$PROJECT_DIR/stackoverflow-46981208/Localization

 $PODS_ROOT/SwiftGen/bin/swiftgen strings "$LocalizablePath/en.lproj/Localizable.strings" -p $TemplatePath/strings/flat-swift4.stencil --output "$LocalizablePath/GeneratedStrings.swift";
  

Localizable.strings

"Hello" = "Hello";

用法

print(L10n.hello)

生成的文件

enter image description here

结果

enter image description here

enter image description here

enter image description here

enter image description here

答案 1 :(得分:0)

您可以使用SwiftGen自动生成代码,以便对各种项目资源进行类型安全访问,其中包括localizable strings。它甚至支持字符串中的占位符。该工具可以在命令行上独立运行,也可以集成到项目的构建过程中,这样每次编译时都可以获得更新的本地化代码。