Skip to content

Commit a02c6d7

Browse files
Prepare PR
1 parent d2c6863 commit a02c6d7

4 files changed

Lines changed: 48 additions & 11 deletions

File tree

LocalizationEditor.xcodeproj/project.pbxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
objects = {
88

99
/* Begin PBXBuildFile section */
10+
172274D420D933970036EA4E /* LocalizationGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 172274D320D933970036EA4E /* LocalizationGroup.swift */; };
1011
F3D9C94620BEC7460081830A /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3D9C94520BEC7460081830A /* AppDelegate.swift */; };
1112
F3D9C94820BEC7460081830A /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3D9C94720BEC7460081830A /* ViewController.swift */; };
1213
F3D9C94A20BEC7460081830A /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = F3D9C94920BEC7460081830A /* Assets.xcassets */; };
@@ -41,6 +42,7 @@
4142
/* End PBXCopyFilesBuildPhase section */
4243

4344
/* Begin PBXFileReference section */
45+
172274D320D933970036EA4E /* LocalizationGroup.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LocalizationGroup.swift; sourceTree = "<group>"; };
4446
F3D9C94220BEC7460081830A /* LocalizationEditor.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = LocalizationEditor.app; sourceTree = BUILT_PRODUCTS_DIR; };
4547
F3D9C94520BEC7460081830A /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
4648
F3D9C94720BEC7460081830A /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = "<group>"; };
@@ -110,6 +112,7 @@
110112
F3D9C95520BEC9E30081830A /* Models */ = {
111113
isa = PBXGroup;
112114
children = (
115+
172274D320D933970036EA4E /* LocalizationGroup.swift */,
113116
F3D9C95620BEC9F10081830A /* LocalizationString.swift */,
114117
F3D9C95820BECA270081830A /* Localization.swift */,
115118
);
@@ -231,6 +234,7 @@
231234
F3D9C94820BEC7460081830A /* ViewController.swift in Sources */,
232235
F3D9C96720BEDF640081830A /* KeyCell.swift in Sources */,
233236
F3D9C95720BEC9F10081830A /* LocalizationString.swift in Sources */,
237+
172274D420D933970036EA4E /* LocalizationGroup.swift in Sources */,
234238
F3D9C95C20BECDBF0081830A /* LocalizationProvider.swift in Sources */,
235239
F3D9C96E20BEEAA10081830A /* LocalizationsDataSource.swift in Sources */,
236240
F3D9C95920BECA270081830A /* Localization.swift in Sources */,
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
//
2+
// LocalizationGroup.swift
3+
// LocalizationEditor
4+
//
5+
// Created by Florian Agsteiner on 19.06.18.
6+
// Copyright © 2018 Igor Kulman. All rights reserved.
7+
//
8+
9+
import Foundation
10+
11+
class LocalizationGroup {
12+
let name: String
13+
let path: String
14+
let localizations : [Localization]
15+
16+
init(name: String, localizations: [Localization], path: String) {
17+
self.name = name
18+
self.localizations = localizations
19+
self.path = path
20+
}
21+
}
22+
23+
extension LocalizationGroup: CustomStringConvertible {
24+
var description: String {
25+
return name
26+
}
27+
}

LocalizationEditor/Providers/LocalizationProvider.swift

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,23 +13,26 @@ import Foundation
1313
class LocalizationProvider {
1414
private let ignoredDirectories = ["Carthage", "build", ".framework"]
1515

16-
func getLocalizations(url: URL) -> [Localization] {
16+
func getLocalizations(url: URL) -> [LocalizationGroup] {
1717
Log.debug?.message("Searching \(url) for Localizable.strings")
1818

1919
guard let folder = try? Folder(path: url.path) else {
2020
return []
2121
}
2222

23-
let localizationFiles = folder.makeFileSequence(recursive: true).filter { file in
24-
return file.name == "Localizable.strings" && ignoredDirectories.map({file.path.contains("\($0)/")}).filter({$0}).count == 0
25-
}
26-
23+
let localizationFiles = Dictionary(grouping: folder.makeFileSequence(recursive: true).filter { file in
24+
return file.name.hasSuffix(".strings") && ignoredDirectories.map({file.path.contains("\($0)/")}).filter({$0}).count == 0
25+
}, by: {$0.path.components(separatedBy:"/").filter({!$0.hasSuffix(".lproj")}).joined(separator:"/")})
26+
2727
Log.debug?.message("Found \(localizationFiles) localization files")
28-
29-
return localizationFiles.map({ file in
30-
let parts = file.path.split(separator: "/")
31-
let lang = String(parts[parts.count - 2]).replacingOccurrences(of: ".lproj", with: "")
32-
return Localization(language: lang, translations: getLocalizationStrings(path: file.path), path: file.path)
28+
29+
return localizationFiles.map({ (path, files) in
30+
let name = URL(fileURLWithPath: path).lastPathComponent
31+
return LocalizationGroup(name: name, localizations: files.map({ file in
32+
let parts = file.path.split(separator: "/")
33+
let lang = String(parts[parts.count - 2]).replacingOccurrences(of: ".lproj", with: "")
34+
return Localization(language: lang, translations: getLocalizationStrings(path: file.path), path: file.path)
35+
}), path: path)
3336
})
3437
}
3538

LocalizationEditor/Providers/LocalizationsDataSource.swift

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ class LocalizationsDataSource: NSObject, NSTableViewDataSource {
1313

1414
// MARK: - Properties
1515

16+
private var localizationGroup: LocalizationGroup? = nil
1617
private var localizations: [Localization] = []
1718
private var masterLocalization: Localization?
1819
private let localizationProvider = LocalizationProvider()
@@ -22,7 +23,9 @@ class LocalizationsDataSource: NSObject, NSTableViewDataSource {
2223

2324
func load(folder: URL, onCompletion: @escaping ([String]) -> Void) {
2425
DispatchQueue.global(qos: .background).async {
25-
self.localizations = self.localizationProvider.getLocalizations(url: folder)
26+
27+
self.localizationGroup = self.localizationProvider.getLocalizations(url: folder).filter({$0.name == "Localizable.strings" }).first
28+
self.localizations = self.localizationGroup?.localizations ?? []
2629
self.numberOfKeys = self.localizations.map({ $0.translations.count }).max() ?? 0
2730
self.masterLocalization = self.localizations.first(where: { $0.translations.count == self.numberOfKeys })
2831

0 commit comments

Comments
 (0)