Issue #798
swiftgen.yml
strings:
inputs: PastePal/Resources/Localizable/en.lproj
outputs:
- templatePath: swiftgen-swiftui-template.stencil
output: PastePal/Resources/Strings.swift
Template from https://github.com/SwiftGen/SwiftGen/issues/685
swiftgen-swiftui-template.stencil
// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen
{% if tables.count > 0 %}
import SwiftUI
// MARK: - Strings
{% macro parametersBlock types %}{% filter removeNewlines:"leading" %}
{% for type in types %}
{% if type == "String" %}
_ p{{forloop.counter}}: Any
{% else %}
_ p{{forloop.counter}}: {{type}}
{% endif %}
{{ ", " if not forloop.last }}
{% endfor %}
{% endfilter %}{% endmacro %}
{% macro argumentsBlock types %}{% filter removeNewlines:"leading" %}
{% for type in types %}
{% if type == "String" %}
String(describing: p{{forloop.counter}})
{% elif type == "UnsafeRawPointer" %}
Int(bitPattern: p{{forloop.counter}})
{% else %}
p{{forloop.counter}}
{% endif %}
{{ ", " if not forloop.last }}
{% endfor %}
{% endfilter %}{% endmacro %}
{% macro recursiveBlock table item %}
{% for string in item.strings %}
{% if not param.noComments %}
/// {{string.translation}}
{% endif %}
{% if string.types %}
public static func {{string.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}({% call parametersBlock string.types %}) -> String {
return L10n.tr("{{table}}", "{{string.key}}", {% call argumentsBlock string.types %})
}
{% else %}
public static let {{string.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = LocalizedString(lookupKey: "{{string.key}}")
{% endif %}
{% endfor %}
{% for child in item.children %}
public enum {{child.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} {
{% filter indent:2 %}{% call recursiveBlock table child %}{% endfilter %}
}
{% endfor %}
{% endmacro %}
public enum L10n {
{% if tables.count > 1 or param.forceFileNameEnum %}
{% for table in tables %}
public enum {{table.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} {
{% filter indent:2 %}{% call recursiveBlock table.name table.levels %}{% endfilter %}
}
{% endfor %}
{% else %}
{% call recursiveBlock tables.first.name tables.first.levels %}
{% endif %}
}
// MARK: - Implementation Details
extension L10n {
fileprivate static func tr(_ table: String, _ key: String, _ args: CVarArg...) -> String {
let format = {{param.bundle|default:"BundleToken.bundle"}}.localizedString(forKey: key, value: nil, table: table)
return String(format: format, locale: Locale.current, arguments: args)
}
}
public struct LocalizedString {
internal let lookupKey: String
var key: LocalizedStringKey {
LocalizedStringKey(lookupKey)
}
var text: String {
L10n.tr("Localizable", lookupKey)
}
}
{% if not param.bundle %}
private final class BundleToken {
static let bundle: Bundle = {
#if SWIFT_PACKAGE
return Bundle.module
#else
return Bundle(for: BundleToken.self)
#endif
}()
}
{% endif %}
{% else %}
// No string found
{% endif %}
For Image
and Color
, use https://github.com/gtokman/SwiftGen-SwiftUI-xcassets