Add placeholders (%@,%s...) examples and fix font extension filename
This commit is contained in:
parent
3ebc292a92
commit
0e3258f588
@ -0,0 +1,57 @@
|
|||||||
|
// Generated from Strings-Stringium at 2022-03-07 11:02:15 +0000
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
fileprivate let kStringsFileName = "sampleStrings"
|
||||||
|
|
||||||
|
extension String {
|
||||||
|
|
||||||
|
// MARK: - Webservice
|
||||||
|
|
||||||
|
/// Translation in en :
|
||||||
|
/// en
|
||||||
|
static var param_lang: String {
|
||||||
|
NSLocalizedString("param_lang", tableName: kStringsFileName, bundle: Bundle.main, value: "en", comment: "")
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - Generic
|
||||||
|
|
||||||
|
/// Translation in en :
|
||||||
|
/// Back
|
||||||
|
static var generic_back: String {
|
||||||
|
NSLocalizedString("generic_back", tableName: kStringsFileName, bundle: Bundle.main, value: "Back", comment: "")
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Translation in en :
|
||||||
|
/// Loading data...
|
||||||
|
static var generic_loading_data: String {
|
||||||
|
NSLocalizedString("generic_loading_data", tableName: kStringsFileName, bundle: Bundle.main, value: "Loading data...", comment: "")
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Translation in en :
|
||||||
|
/// Welcome \"%@\" !
|
||||||
|
static var generic_welcome_firstname_format: String {
|
||||||
|
NSLocalizedString("generic_welcome_firstname_format", tableName: kStringsFileName, bundle: Bundle.main, value: "Welcome \"%@\" !", comment: "")
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Translation in en :
|
||||||
|
/// Welcome \"%@\" !
|
||||||
|
static func generic_welcome_firstname_format(arg0: String) -> String {
|
||||||
|
String(format: Self.generic_welcome_firstname_format, arg0)
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - Placeholders
|
||||||
|
|
||||||
|
/// Translation in en :
|
||||||
|
/// You %%: %2$@ %1$@ Age: %3$d
|
||||||
|
static var placeholders_test_one: String {
|
||||||
|
NSLocalizedString("placeholders_test_one", tableName: kStringsFileName, bundle: Bundle.main, value: "You %%: %2$@ %1$@ Age: %3$d", comment: "")
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Translation in en :
|
||||||
|
/// You %%: %2$@ %1$@ Age: %3$d
|
||||||
|
static func placeholders_test_one(arg0: String, arg1: String, arg2: Int) -> String {
|
||||||
|
String(format: Self.placeholders_test_one, arg0, arg1, arg2)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,57 @@
|
|||||||
|
// Generated from Strings-Stringium at 2022-03-07 11:00:52 +0000
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
fileprivate let kStringsFileName = "sampleStrings"
|
||||||
|
|
||||||
|
extension StringTest {
|
||||||
|
|
||||||
|
// MARK: - Webservice
|
||||||
|
|
||||||
|
/// Translation in en :
|
||||||
|
/// en
|
||||||
|
var param_lang: String {
|
||||||
|
NSLocalizedString("param_lang", tableName: kStringsFileName, bundle: Bundle.main, value: "en", comment: "")
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - Generic
|
||||||
|
|
||||||
|
/// Translation in en :
|
||||||
|
/// Back
|
||||||
|
var generic_back: String {
|
||||||
|
NSLocalizedString("generic_back", tableName: kStringsFileName, bundle: Bundle.main, value: "Back", comment: "")
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Translation in en :
|
||||||
|
/// Loading data...
|
||||||
|
var generic_loading_data: String {
|
||||||
|
NSLocalizedString("generic_loading_data", tableName: kStringsFileName, bundle: Bundle.main, value: "Loading data...", comment: "")
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Translation in en :
|
||||||
|
/// Welcome \"%@\" !
|
||||||
|
var generic_welcome_firstname_format: String {
|
||||||
|
NSLocalizedString("generic_welcome_firstname_format", tableName: kStringsFileName, bundle: Bundle.main, value: "Welcome \"%@\" !", comment: "")
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Translation in en :
|
||||||
|
/// Welcome \"%@\" !
|
||||||
|
func generic_welcome_firstname_format(arg0: String) -> String {
|
||||||
|
String(format: self.generic_welcome_firstname_format, arg0)
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - Placeholders
|
||||||
|
|
||||||
|
/// Translation in en :
|
||||||
|
/// You %%: %2$@ %1$@ Age: %3$d
|
||||||
|
var placeholders_test_one: String {
|
||||||
|
NSLocalizedString("placeholders_test_one", tableName: kStringsFileName, bundle: Bundle.main, value: "You %%: %2$@ %1$@ Age: %3$d", comment: "")
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Translation in en :
|
||||||
|
/// You %%: %2$@ %1$@ Age: %3$d
|
||||||
|
func placeholders_test_one(arg0: String, arg1: String, arg2: Int) -> String {
|
||||||
|
String(format: self.placeholders_test_one, arg0, arg1, arg2)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -6,14 +6,19 @@
|
|||||||
|
|
||||||
/********** Webservice **********/
|
/********** Webservice **********/
|
||||||
|
|
||||||
"param_lang" = "en-us"
|
"param_lang" = "en-us";
|
||||||
|
|
||||||
|
|
||||||
/********** Generic **********/
|
/********** Generic **********/
|
||||||
|
|
||||||
"generic_back" = "Back"
|
"generic_back" = "Back";
|
||||||
|
|
||||||
"generic_loading_data" = "Loading data..."
|
"generic_loading_data" = "Loading data...";
|
||||||
|
|
||||||
"generic_welcome_firstname_format" = "Welcome \"%@\" !"
|
"generic_welcome_firstname_format" = "Welcome \"%@\" !";
|
||||||
|
|
||||||
|
|
||||||
|
/********** Placeholders **********/
|
||||||
|
|
||||||
|
"placeholders_test_one" = "You %%: %2$@ %1$@ Age: %3$d";
|
||||||
|
|
||||||
|
@ -6,14 +6,19 @@
|
|||||||
|
|
||||||
/********** Webservice **********/
|
/********** Webservice **********/
|
||||||
|
|
||||||
"param_lang" = "en"
|
"param_lang" = "en";
|
||||||
|
|
||||||
|
|
||||||
/********** Generic **********/
|
/********** Generic **********/
|
||||||
|
|
||||||
"generic_back" = "Back"
|
"generic_back" = "Back";
|
||||||
|
|
||||||
"generic_loading_data" = "Loading data..."
|
"generic_loading_data" = "Loading data...";
|
||||||
|
|
||||||
"generic_welcome_firstname_format" = "Welcome \"%@\" !"
|
"generic_welcome_firstname_format" = "Welcome \"%@\" !";
|
||||||
|
|
||||||
|
|
||||||
|
/********** Placeholders **********/
|
||||||
|
|
||||||
|
"placeholders_test_one" = "You %%: %2$@ %1$@ Age: %3$d";
|
||||||
|
|
||||||
|
@ -6,14 +6,19 @@
|
|||||||
|
|
||||||
/********** Webservice **********/
|
/********** Webservice **********/
|
||||||
|
|
||||||
"param_lang" = "fr"
|
"param_lang" = "fr";
|
||||||
|
|
||||||
|
|
||||||
/********** Generic **********/
|
/********** Generic **********/
|
||||||
|
|
||||||
"generic_back" = "Retour"
|
"generic_back" = "Retour";
|
||||||
|
|
||||||
"generic_loading_data" = "Chargement des données..."
|
"generic_loading_data" = "Chargement des données...";
|
||||||
|
|
||||||
"generic_welcome_firstname_format" = "Bienvenue \"%@\" !"
|
"generic_welcome_firstname_format" = "Bienvenue \"%@\" !";
|
||||||
|
|
||||||
|
|
||||||
|
/********** Placeholders **********/
|
||||||
|
|
||||||
|
"placeholders_test_one" = "Vous %%: %1$@ %2$@ Age: %3$d";
|
||||||
|
|
||||||
|
@ -25,3 +25,11 @@
|
|||||||
comments =
|
comments =
|
||||||
fr = Bienvenue "%@" !
|
fr = Bienvenue "%@" !
|
||||||
en-us = Welcome "%@" !
|
en-us = Welcome "%@" !
|
||||||
|
|
||||||
|
[[Placeholders]]
|
||||||
|
[placeholders_test_one]
|
||||||
|
en = You %%: %2$@ %1$@ Age: %3$d
|
||||||
|
tags = droid,ios
|
||||||
|
comments =
|
||||||
|
fr = Vous %%: %1$@ %2$@ Age: %3$d
|
||||||
|
en-us = You %%: %2$@ %1$@ Age: %3$d
|
||||||
|
@ -38,6 +38,68 @@ class Definition {
|
|||||||
|
|
||||||
// MARK: -
|
// MARK: -
|
||||||
|
|
||||||
|
private func getStringParameters(input: String) -> (inputParameters: [String], translationArguments: [String])? {
|
||||||
|
var methodsParameters = [String]()
|
||||||
|
|
||||||
|
let printfPlaceholderRegex = try! NSRegularExpression(pattern: "%(?:\\d+\\$)?[+-]?(?:[ 0]|'.{1})?-?\\d*(?:\\.\\d+)?[blcdeEufFgGosxX@]*")
|
||||||
|
printfPlaceholderRegex.enumerateMatches(in: input, options: [], range: NSRange(location: 0, length: input.count)) { match, _, stop in
|
||||||
|
guard let match = match else { return }
|
||||||
|
|
||||||
|
if let range = Range(match.range, in: input), let last = input[range].last {
|
||||||
|
debugPrint("Found: \(input[range])")
|
||||||
|
switch last {
|
||||||
|
case "d", "u":
|
||||||
|
methodsParameters.append("Int")
|
||||||
|
case "f", "F":
|
||||||
|
methodsParameters.append("Double")
|
||||||
|
case "@", "s", "c":
|
||||||
|
methodsParameters.append("String")
|
||||||
|
case "%":
|
||||||
|
// if you need to print %, you have to add %%
|
||||||
|
break
|
||||||
|
default:
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if methodsParameters.isEmpty {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
var inputParameters = [String]()
|
||||||
|
var translationArguments = [String]()
|
||||||
|
for (index, paramType) in methodsParameters.enumerated() {
|
||||||
|
let paramName = "arg\(index)"
|
||||||
|
translationArguments.append(paramName)
|
||||||
|
inputParameters.append("\(paramName): \(paramType)")
|
||||||
|
}
|
||||||
|
|
||||||
|
return (inputParameters: inputParameters, translationArguments: translationArguments)
|
||||||
|
}
|
||||||
|
|
||||||
|
private func getBaseProperty(lang: String, translation: String, isStatic: Bool) -> String {
|
||||||
|
"""
|
||||||
|
/// Translation in \(lang) :
|
||||||
|
/// \(translation)
|
||||||
|
\(isStatic ? "static ": "")var \(name): String {
|
||||||
|
NSLocalizedString("\(name)", tableName: kStringsFileName, bundle: Bundle.main, value: "\(translation)", comment: "")
|
||||||
|
}
|
||||||
|
"""
|
||||||
|
}
|
||||||
|
|
||||||
|
private func getBaseMethod(lang: String, translation: String, isStatic: Bool, inputParameters: [String], translationArguments: [String]) -> String {
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
/// Translation in \(lang) :
|
||||||
|
/// \(translation)
|
||||||
|
\(isStatic ? "static ": "")func \(name)(\(inputParameters.joined(separator: ", "))) -> String {
|
||||||
|
String(format: \(isStatic ? "Self" : "self").\(name), \(translationArguments.joined(separator: ", ")))
|
||||||
|
}
|
||||||
|
"""
|
||||||
|
}
|
||||||
|
|
||||||
func getNSLocalizedStringProperty(forLang lang: String) -> String {
|
func getNSLocalizedStringProperty(forLang lang: String) -> String {
|
||||||
guard let translation = translations[lang] else {
|
guard let translation = translations[lang] else {
|
||||||
let error = StringiumError.langNotDefined(lang, name, reference != nil)
|
let error = StringiumError.langNotDefined(lang, name, reference != nil)
|
||||||
@ -45,13 +107,20 @@ class Definition {
|
|||||||
Stringium.exit(withError: error)
|
Stringium.exit(withError: error)
|
||||||
}
|
}
|
||||||
|
|
||||||
return """
|
// Generate property
|
||||||
/// Translation in \(lang) :
|
let property = getBaseProperty(lang: lang, translation: translation, isStatic: false)
|
||||||
/// \(translation)
|
|
||||||
var \(name): String {
|
// Generate method
|
||||||
NSLocalizedString("\(name)", tableName: kStringsFileName, bundle: Bundle.main, value: "\(translation)", comment: "")
|
var method = ""
|
||||||
|
if let parameters = self.getStringParameters(input: translation) {
|
||||||
|
method = getBaseMethod(lang: lang,
|
||||||
|
translation: translation,
|
||||||
|
isStatic: false,
|
||||||
|
inputParameters: parameters.inputParameters,
|
||||||
|
translationArguments: parameters.translationArguments)
|
||||||
}
|
}
|
||||||
"""
|
|
||||||
|
return property + method
|
||||||
}
|
}
|
||||||
|
|
||||||
func getNSLocalizedStringStaticProperty(forLang lang: String) -> String {
|
func getNSLocalizedStringStaticProperty(forLang lang: String) -> String {
|
||||||
@ -61,13 +130,20 @@ class Definition {
|
|||||||
Stringium.exit(withError: error)
|
Stringium.exit(withError: error)
|
||||||
}
|
}
|
||||||
|
|
||||||
return """
|
// Generate property
|
||||||
/// Translation in \(lang) :
|
let property = getBaseProperty(lang: lang, translation: translation, isStatic: true)
|
||||||
/// \(translation)
|
|
||||||
static var \(name): String {
|
// Generate method
|
||||||
NSLocalizedString("\(name)", tableName: kStringsFileName, bundle: Bundle.main, value: "\(translation)", comment: "")
|
var method = ""
|
||||||
|
if let parameters = self.getStringParameters(input: translation) {
|
||||||
|
method = getBaseMethod(lang: lang,
|
||||||
|
translation: translation,
|
||||||
|
isStatic: true,
|
||||||
|
inputParameters: parameters.inputParameters,
|
||||||
|
translationArguments: parameters.translationArguments)
|
||||||
}
|
}
|
||||||
"""
|
|
||||||
|
return property + method
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: - Raw strings
|
// MARK: - Raw strings
|
||||||
|
Loading…
x
Reference in New Issue
Block a user