Skip to content

Commit de9453e

Browse files
committed
Add locale functions for string
1 parent d2c9b5e commit de9453e

File tree

4 files changed

+49
-29
lines changed

4 files changed

+49
-29
lines changed

Examples/ResourceApp/ResourceAppTests/StringsTests.swift

Lines changed: 18 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -30,27 +30,25 @@ class StringsTests: XCTestCase {
3030

3131
func testCorrectValues() {
3232

33-
/*
3433
// Force locales, for decimal point and decimal comma versions
35-
let genericEN = R.string.generic(preferredLanguages: ["en_US"]) // (bundle: .main, locale: Locale(identifier: "en_US"))
36-
let genericNL = R.string.generic(preferredLanguages: ["nl_NL"]) // (bundle: .main, locale: Locale(identifier: "nl_NL"))
37-
let genericFR = R.string.generic(preferredLanguages: ["fr_FR"]) //(bundle: .main, locale: Locale(identifier: "fr_FR"))
38-
39-
XCTAssertEqual(genericEN.precision1(12345.678), "one - 12,345.68")
40-
XCTAssertEqual(genericEN.precision2(12345.678), "two - 12,345.68")
41-
XCTAssertEqual(genericEN.precision3(12345.678), "three - 12,345.6780")
42-
XCTAssertEqual(genericEN.precision4(12345.678), "four - 12,345.68")
43-
44-
XCTAssertEqual(genericNL.precision1(12345.678), "one - 12.345,68")
45-
XCTAssertEqual(genericNL.precision2(12345.678), "two - 12.345,68")
46-
XCTAssertEqual(genericNL.precision3(12345.678), "three - 12.345,6780")
47-
XCTAssertEqual(genericNL.precision4(12345.678), "four - 12.345,68")
48-
49-
XCTAssertEqual(genericFR.precision1(12345.678), "one - 12\u{202F}345,68")
50-
XCTAssertEqual(genericFR.precision2(12345.678), "two - 12\u{202F}345,68")
51-
XCTAssertEqual(genericFR.precision3(12345.678), "three - 12\u{202F}345,6780")
52-
XCTAssertEqual(genericFR.precision4(12345.678), "four - 12\u{202F}345,68")
53-
*/
34+
let stringsEN = R.string(locale: Locale(identifier: "en_US"))
35+
let stringsNL = R.string(locale: Locale(identifier: "nl_NL"))
36+
let stringsFR = R.string(locale: Locale(identifier: "fr_FR"))
37+
38+
XCTAssertEqual(stringsEN.generic.precision1(12345.678), "one - 12,345.68")
39+
XCTAssertEqual(stringsEN.generic.precision2(12345.678), "two - 12,345.68")
40+
XCTAssertEqual(stringsEN.generic.precision3(12345.678), "three - 12,345.6780")
41+
XCTAssertEqual(stringsEN.generic.precision4(12345.678), "four - 12,345.68")
42+
43+
XCTAssertEqual(stringsNL.generic.precision1(12345.678), "one - 12.345,68")
44+
XCTAssertEqual(stringsNL.generic.precision2(12345.678), "two - 12.345,68")
45+
XCTAssertEqual(stringsNL.generic.precision3(12345.678), "three - 12.345,6780")
46+
XCTAssertEqual(stringsNL.generic.precision4(12345.678), "four - 12.345,68")
47+
48+
XCTAssertEqual(stringsFR.generic.precision1(12345.678), "one - 12\u{202F}345,68")
49+
XCTAssertEqual(stringsFR.generic.precision2(12345.678), "two - 12\u{202F}345,68")
50+
XCTAssertEqual(stringsFR.generic.precision3(12345.678), "three - 12\u{202F}345,6780")
51+
XCTAssertEqual(stringsFR.generic.precision4(12345.678), "four - 12\u{202F}345,68")
5452

5553
XCTAssertEqual(
5654
R.string.settings.multilineKeyWeird(),

Sources/RswiftGenerators/StringsTable+Generator.swift

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ extension Struct {
1515
deploymentTarget: deploymentTarget,
1616
name: SwiftIdentifier(name: name),
1717
typeReference: TypeReference(module: .host, rawName: self.name.value),
18-
valueCodeString: ".init(bundle: bundle, preferredLanguages: nil)"
18+
valueCodeString: ".init(bundle: bundle, preferredLanguages: nil, locale: nil)"
1919
)
2020
}
2121

@@ -26,7 +26,18 @@ extension Struct {
2626
name: SwiftIdentifier(name: name),
2727
params: [.init(name: "bundle", localName: nil, typeReference: .bundle, defaultValue: nil)],
2828
returnType: TypeReference(module: .host, rawName: self.name.value),
29-
valueCodeString: ".init(bundle: bundle, preferredLanguages: nil)"
29+
valueCodeString: ".init(bundle: bundle, preferredLanguages: nil, locale: nil)"
30+
)
31+
}
32+
33+
public func generateLocaleFunctionForString(name: String) -> Function {
34+
Function(
35+
comments: [],
36+
deploymentTarget: deploymentTarget,
37+
name: SwiftIdentifier(name: name),
38+
params: [.init(name: "locale", localName: nil, typeReference: .locale, defaultValue: nil)],
39+
returnType: TypeReference(module: .host, rawName: self.name.value),
40+
valueCodeString: ".init(bundle: bundle, preferredLanguages: nil, locale: locale)"
3041
)
3142
}
3243

@@ -35,9 +46,12 @@ extension Struct {
3546
comments: [],
3647
deploymentTarget: deploymentTarget,
3748
name: SwiftIdentifier(name: name),
38-
params: [.init(name: "preferredLanguages", localName: nil, typeReference: .init(module: .stdLib, rawName: "[String]"), defaultValue: nil)],
49+
params: [
50+
.init(name: "preferredLanguages", localName: nil, typeReference: .init(module: .stdLib, rawName: "[String]"), defaultValue: nil),
51+
.init(name: "locale", localName: nil, typeReference: .init(module: .stdLib, rawName: "Locale?"), defaultValue: "nil")
52+
],
3953
returnType: TypeReference(module: .host, rawName: self.name.value),
40-
valueCodeString: ".init(bundle: bundle, preferredLanguages: preferredLanguages)"
54+
valueCodeString: ".init(bundle: bundle, preferredLanguages: preferredLanguages, locale: locale)"
4155
)
4256
}
4357
}
@@ -85,10 +99,12 @@ extension StringsTable {
8599
params: [
86100
.init(name: "bundle", localName: nil, typeReference: .bundle, defaultValue: nil),
87101
.init(name: "preferredLanguages", localName: nil, typeReference: .init(module: .stdLib, rawName: "[String]?"), defaultValue: "nil"),
102+
.init(name: "locale", localName: nil, typeReference: .init(module: .stdLib, rawName: "Locale?"), defaultValue: "nil"),
88103
],
89104
valueCodeString: """
90105
self.bundle = bundle
91106
self.preferredLanguages = preferredLanguages
107+
self.locale = locale
92108
"""
93109
)
94110
}
@@ -131,7 +147,7 @@ extension StringsTable {
131147
VarGetter(
132148
name: name,
133149
typeReference: TypeReference(module: .host, rawName: name.value),
134-
valueCodeString: #".init(source: .init(bundle: bundle, tableName: "\#(tableName.escapedStringLiteral)", preferredLanguages: preferredLanguages))"#
150+
valueCodeString: #".init(source: .init(bundle: bundle, tableName: "\#(tableName.escapedStringLiteral)", preferredLanguages: preferredLanguages, locale: locale))"#
135151
)
136152
}
137153

@@ -156,7 +172,7 @@ extension StringsTable {
156172
.init(name: "preferredLanguages", localName: nil, typeReference: TypeReference(module: .stdLib, rawName: "[String]"), defaultValue: nil),
157173
],
158174
returnType: TypeReference(module: .host, rawName: name.value),
159-
valueCodeString: #".init(source: .init(bundle: bundle, tableName: "\#(tableName.escapedStringLiteral)", preferredLanguages: preferredLanguages))"#
175+
valueCodeString: #".init(source: .init(bundle: bundle, tableName: "\#(tableName.escapedStringLiteral)", preferredLanguages: preferredLanguages, locale: locale))"#
160176
)
161177
}
162178

Sources/RswiftResources/Integrations/StringResource+Integrations.swift

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -187,13 +187,18 @@ extension Text {
187187
}
188188

189189
extension StringResource.Source {
190-
public init(bundle: Bundle, tableName: String, preferredLanguages: [String]?) {
190+
public init(bundle: Bundle, tableName: String, preferredLanguages: [String]?, locale overrideLocale: Locale?) {
191191
guard let preferredLanguages = preferredLanguages else {
192-
self = .hosting(bundle)
192+
if let locale = overrideLocale {
193+
self = .selected(bundle, locale)
194+
} else {
195+
self = .hosting(bundle)
196+
}
197+
193198
return
194199
}
195200
if let (bundle, locale) = bundle.firstBundleAndLocale(tableName: tableName, preferredLanguages: preferredLanguages) {
196-
self = .selected(bundle, locale)
201+
self = .selected(bundle, overrideLocale ?? locale)
197202
} else {
198203
self = .none
199204
}

Sources/rswift/RswiftCore.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,7 @@ public struct RswiftCore {
218218
if generateString {
219219
stringStruct.generateBundleVarGetterForString(name: "string")
220220
stringStruct.generateBundleFunctionForString(name: "string")
221+
stringStruct.generateLocaleFunctionForString(name: "string")
221222
stringStruct.generatePreferredLanguagesFunctionForString(name: "string")
222223
stringStruct
223224
}

0 commit comments

Comments
 (0)