Skip to content

Commit afcf26c

Browse files
committed
✨ saving the data
1 parent 6519daf commit afcf26c

File tree

6 files changed

+53
-32
lines changed

6 files changed

+53
-32
lines changed

LocalizationEditor/Models/Localization.swift

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,16 @@
88

99
import Foundation
1010

11-
struct Localization {
11+
class Localization {
1212
let language: String
1313
let translations: [LocalizationString]
1414
let path: String
15+
16+
init(language: String, translations: [LocalizationString], path: String) {
17+
self.language = language
18+
self.translations = translations
19+
self.path = path
20+
}
1521
}
1622

1723
extension Localization: CustomStringConvertible {

LocalizationEditor/Models/LocalizationString.swift

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,18 @@
88

99
import Foundation
1010

11-
struct LocalizationString {
11+
class LocalizationString {
1212
let key: String
13-
let value: String
13+
private(set) var value: String
14+
15+
init(key: String, value: String) {
16+
self.key = key
17+
self.value = value
18+
}
19+
20+
func update(value: String) {
21+
self.value = value
22+
}
1423
}
1524

1625
extension LocalizationString: CustomStringConvertible {

LocalizationEditor/Providers/LocalizationProvider.swift

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,20 @@
66
// Copyright © 2018 Teamwire. All rights reserved.
77
//
88

9+
import CleanroomLogger
910
import Files
1011
import Foundation
11-
import CleanroomLogger
1212

1313
class LocalizationProvider {
1414
func getLocalizations(url: URL) -> [Localization] {
1515
Log.debug?.message("Searching \(url) for Localizable.strings")
16-
16+
1717
guard let folder = try? Folder(path: url.path) else {
1818
return []
1919
}
2020

2121
let localizationFiles = folder.makeFileSequence(recursive: true).filter({ $0.name == "Localizable.strings" })
22-
22+
2323
Log.debug?.message("Found \(localizationFiles) localization files")
2424

2525
return localizationFiles.map({ file in
@@ -40,15 +40,35 @@ class LocalizationProvider {
4040
let s = LocalizationString(key: key, value: value)
4141
strings.append(s)
4242
}
43-
43+
4444
Log.debug?.message("Found \(strings.count) keys for in \(path)")
45-
45+
4646
return strings.sorted(by: { (lhs, rhs) -> Bool in
4747
lhs.key < rhs.key
4848
})
4949
}
5050

51-
func updateLocalization(localization: Localization, string: LocalizationString) {
52-
Log.debug?.message("Updating \(localization) with \(string)")
51+
func updateLocalization(localization: Localization, string: LocalizationString, with value: String) {
52+
guard string.value != value else {
53+
Log.debug?.message("Same value provided for \(string)")
54+
return
55+
}
56+
57+
Log.debug?.message("Updating \(string) with \(value) in \(localization)")
58+
59+
string.update(value: value)
60+
61+
let data = localization.translations.map { string in
62+
"\"\(string.key)\" = \"\(string.value.replacingOccurrences(of: "\"", with: "\\\""))\";"
63+
}.reduce("") { (prev, next) in
64+
"\(prev)\n\(next)"
65+
}
66+
67+
do {
68+
try data.write(toFile: localization.path, atomically: false, encoding: .utf8)
69+
Log.debug?.message("Localization file for \(localization) updated")
70+
} catch {
71+
Log.error?.message("Writing localization file for \(localization) failed with \(error)")
72+
}
5373
}
5474
}

LocalizationEditor/Providers/LocalizationsDataSource.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,11 @@ class LocalizationsDataSource: NSObject, NSTableViewDataSource {
3838
return localization.translations.first(where: { $0.key == masterLocalization.translations[row].key })
3939
}
4040

41-
func updateLocalization(language: String, string: LocalizationString) {
41+
func updateLocalization(language: String, string: LocalizationString, with value: String) {
4242
guard let localization = localizations.first(where: { $0.language == language }) else {
4343
return
4444
}
45-
localizationProvider.updateLocalization(localization: localization, string: string)
45+
localizationProvider.updateLocalization(localization: localization, string: string, with: value)
4646
}
4747

4848
// MARK: - Delegate

LocalizationEditor/UI/Cells/LocalizationCell.swift

Lines changed: 4 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
import Cocoa
1010

1111
protocol LocalizationCellDelegate: class {
12-
func userDidUpdateLocalizationString(language: String, string: LocalizationString)
12+
func userDidUpdateLocalizationString(language: String, string: LocalizationString, with value: String)
1313
}
1414

1515
class LocalizationCell: NSTableCellView {
@@ -32,28 +32,14 @@ class LocalizationCell: NSTableCellView {
3232
valueTextField.delegate = self
3333
}
3434
}
35-
36-
override init(frame frameRect: NSRect) {
37-
super.init(frame: frameRect)
38-
setup()
39-
}
40-
41-
required init?(coder decoder: NSCoder) {
42-
super.init(coder: decoder)
43-
setup()
44-
}
45-
46-
private func setup() {
47-
48-
}
4935
}
5036

5137
extension LocalizationCell: NSTextFieldDelegate {
52-
override func controlTextDidEndEditing(_ obj: Notification) {
38+
override func controlTextDidEndEditing(_: Notification) {
5339
guard let language = language, let value = value else {
5440
return
5541
}
56-
57-
delegate?.userDidUpdateLocalizationString(language: language, string: LocalizationString(key: value.key, value: valueTextField.stringValue))
42+
43+
delegate?.userDidUpdateLocalizationString(language: language, string: value, with: valueTextField.stringValue)
5844
}
5945
}

LocalizationEditor/UI/ViewController.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ extension ViewController: NSTableViewDelegate {
106106
}
107107

108108
extension ViewController: LocalizationCellDelegate {
109-
func userDidUpdateLocalizationString(language: String, string: LocalizationString) {
110-
dataSource.updateLocalization(language: language, string: string)
109+
func userDidUpdateLocalizationString(language: String, string: LocalizationString, with value: String) {
110+
dataSource.updateLocalization(language: language, string: string, with: value)
111111
}
112112
}

0 commit comments

Comments
 (0)