Add placeholders (%@,%s...) examples and fix font extension filename

This commit is contained in:
Thibaut Schmitt 2022-07-22 16:25:32 +02:00
parent 3ebc292a92
commit 0e3258f588
7 changed files with 239 additions and 26 deletions

View File

@ -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)
}
}

View File

@ -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)
}
}

View File

@ -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";

View File

@ -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";

View File

@ -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";

View File

@ -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

View File

@ -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