66// Copyright © 2018 Teamwire. All rights reserved.
77//
88
9+ import CleanroomLogger
910import Files
1011import Foundation
11- import CleanroomLogger
1212
1313class 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}
0 commit comments