├── DHLocalizedString.xcodeproj ├── project.xcworkspace │ └── contents.xcworkspacedata └── project.pbxproj ├── DHLocalizedStringTests ├── DHLocalizedStringAlternative │ ├── Localizable.strings │ ├── Alternative.strings │ └── Info.plist ├── Alternative.strings ├── Localizable.strings ├── Info.plist ├── DHLocalizedStringPostfixTests.swift ├── DHLocalizedStringInfixTests.swift └── DHLocalizedStringFunctionTests.swift ├── DHLocalizedString ├── DHLocalizedString.h ├── Info.plist └── DHLocalizedString.swift ├── LICENSE └── README.md /DHLocalizedString.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /DHLocalizedStringTests/DHLocalizedStringAlternative/Localizable.strings: -------------------------------------------------------------------------------- 1 | "Simple String" = "Translation in Alternative Bundle"; 2 | 3 | "String1" = "MUST NEVER TRANSLATE (String1)"; 4 | "String2" = "MUST NEVER TRANSLATE (String2)"; 5 | "42" = "MUST NEVER TRANSLATE (42)"; 6 | -------------------------------------------------------------------------------- /DHLocalizedStringTests/DHLocalizedStringAlternative/Alternative.strings: -------------------------------------------------------------------------------- 1 | "Simple String" = "Translation in Alternative Bundle, Alternative file"; 2 | 3 | "String1" = "MUST NEVER TRANSLATE (String1)"; 4 | "String2" = "MUST NEVER TRANSLATE (String2)"; 5 | "42" = "MUST NEVER TRANSLATE (42)"; 6 | -------------------------------------------------------------------------------- /DHLocalizedStringTests/Alternative.strings: -------------------------------------------------------------------------------- 1 | "Simple String" = "Translation of simple string (alternative file)"; 2 | "With sorting %@, %@, and %@." = "end: %3$@, mid: %2$@, start: %1$@"; 3 | 4 | "String1" = "MUST NEVER TRANSLATE (String1)"; 5 | "String2" = "MUST NEVER TRANSLATE (String2)"; 6 | "42" = "MUST NEVER TRANSLATE (42)"; 7 | -------------------------------------------------------------------------------- /DHLocalizedStringTests/Localizable.strings: -------------------------------------------------------------------------------- 1 | "Simple String" = "This is a translation of a simple string"; 2 | "With arguments %@, %@, and %@." = "Translation with three arguments: [%@], [%@], and [%@]."; 3 | "With sorting %@, %@, and %@." = "Last: %3$@, First: %1$@, Second: %2$@"; 4 | 5 | "String1" = "MUST NEVER TRANSLATE (String1)"; 6 | "String2" = "MUST NEVER TRANSLATE (String2)"; 7 | "42" = "MUST NEVER TRANSLATE (42)"; 8 | -------------------------------------------------------------------------------- /DHLocalizedString/DHLocalizedString.h: -------------------------------------------------------------------------------- 1 | // 2 | // DHLocalizedStringOSX.h 3 | // DHLocalizedStringOSX 4 | // 5 | // Created by Daniel Höpfl on 02.11.15. 6 | // Copyright © 2015 Daniel Höpfl. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | //! Project version number for DHLocalizedString. 12 | FOUNDATION_EXPORT double DHLocalizedStringVersionNumber; 13 | 14 | //! Project version string for DHLocalizedStringOSX. 15 | FOUNDATION_EXPORT const unsigned char DHLocalizedStringVersionString[]; 16 | 17 | // In this header, you should import all the public headers of your framework using statements like #import 18 | -------------------------------------------------------------------------------- /DHLocalizedStringTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | NSHumanReadableCopyright 24 | Copyright © 2015 Daniel Höpfl. All rights reserved. 25 | 26 | 27 | -------------------------------------------------------------------------------- /DHLocalizedString/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | $(CURRENT_PROJECT_VERSION) 23 | NSHumanReadableCopyright 24 | Copyright © 2015 Daniel Höpfl. All rights reserved. 25 | 26 | 27 | -------------------------------------------------------------------------------- /DHLocalizedStringTests/DHLocalizedStringAlternative/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | NSHumanReadableCopyright 24 | Copyright © 2015 Daniel Höpfl. All rights reserved. 25 | 26 | 27 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2015 Daniel Höpfl 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /DHLocalizedStringTests/DHLocalizedStringPostfixTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DHLocalizedStringPostfixTests.swift 3 | // DHLocalizedString 4 | // 5 | // Created by Daniel Höpfl on 02.11.15. 6 | // Copyright © 2015 Daniel Höpfl. All rights reserved. 7 | // 8 | 9 | import XCTest 10 | @testable import DHLocalizedString 11 | 12 | class DHLocalizedStringPostfixTests: XCTestCase { 13 | let x = "String1" 14 | let y = "String2" 15 | let z = 42 16 | 17 | override func setUp() { 18 | super.setUp() 19 | 20 | DHLocalizedStringStore.mainBundle = NSBundle(forClass: DHLocalizedStringPostfixTests.self); 21 | } 22 | 23 | func testSimpleExample() { 24 | let result = "Simple String"|~ 25 | 26 | print(" Input: \"Simple String\"|~") 27 | print(" Key: Simple String") 28 | print("Expected: This is a translation of a simple string") 29 | print(" Result: \(result)") 30 | print("") 31 | 32 | XCTAssertEqual("This is a translation of a simple string", 33 | result) 34 | } 35 | 36 | func testWithArgumentsExample() { 37 | let result = "With arguments \(x), \(y), and \(z)."|~ 38 | 39 | print(" Input: \"With arguments \\(x), \\(y), and \\(z).\"|~") 40 | print(" Key: With arguments %@, %@, and %@.") 41 | print("Expected: Translation with three arguments: [String1], [String2], and [42].") 42 | print(" Result: \(result)") 43 | print("") 44 | 45 | XCTAssertEqual("Translation with three arguments: [String1], [String2], and [42].", 46 | result) 47 | } 48 | 49 | 50 | func testWithSortingExample() { 51 | let result = "With sorting \(x), \(y), and \(z)."|~ 52 | 53 | print(" Input: \"With sorting \\(x), \\(y), and \\(z).\"|~") 54 | print(" Key: With sorting %@, %@, and %@.") 55 | print("Expected: Last: 42, First: String1, Second: String2") 56 | print(" Result: \(result)") 57 | print("") 58 | 59 | XCTAssertEqual("Last: 42, First: String1, Second: String2", 60 | result) 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /DHLocalizedStringTests/DHLocalizedStringInfixTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DHLocalizedStringInfixTests.swift 3 | // DHLocalizedString 4 | // 5 | // Created by Daniel Höpfl on 02.11.15. 6 | // Copyright © 2015 Daniel Höpfl. All rights reserved. 7 | // 8 | 9 | import XCTest 10 | @testable import DHLocalizedString 11 | 12 | class DHLocalizedStringInfixTests: XCTestCase { 13 | let x = "String1" 14 | let y = "String2" 15 | let z = 42 16 | 17 | var alternativeBundle: NSBundle = NSBundle.mainBundle() 18 | 19 | override func setUp() { 20 | super.setUp() 21 | 22 | DHLocalizedStringStore.mainBundle = NSBundle(forClass: DHLocalizedStringInfixTests.self); 23 | 24 | let path = DHLocalizedStringStore.mainBundle.resourcePath! 25 | alternativeBundle = NSBundle(path: path + "/DHLocalizedStringAlternative.bundle")! 26 | } 27 | 28 | func testSimpleExampleFromAlternativeFile() { 29 | let result = "Simple String" |~ "Alternative" 30 | 31 | print(" Input: \"Simple String\" |~ \"Alternative\"") 32 | print("Expected: Translation of simple string (alternative file)") 33 | print(" Result: \(result)") 34 | print("") 35 | 36 | XCTAssertEqual("Translation of simple string (alternative file)", 37 | result) 38 | } 39 | 40 | func testSimpleExampleFromAlternativeBundle() { 41 | let result = "Simple String" |~ alternativeBundle 42 | 43 | print(" Input: \"Simple String\" |~ alternativeBundle") 44 | print("Expected: Translation in Alternative Bundle") 45 | print(" Result: \(result)") 46 | print("") 47 | 48 | XCTAssertEqual("Translation in Alternative Bundle", 49 | result) 50 | } 51 | 52 | 53 | func testSimpleExampleFromAlternativeFileAndBundle() { 54 | let result = "Simple String" |~ ("Alternative", alternativeBundle) 55 | 56 | print(" Input: \"Simple String\" |~ (\"Alternative\", alternativeBundle)") 57 | print("Expected: Translation in Alternative Bundle, Alternative file") 58 | print(" Result: \(result)") 59 | print("") 60 | 61 | XCTAssertEqual("Translation in Alternative Bundle, Alternative file", 62 | result) 63 | } 64 | 65 | func testSimpleExampleFromMainFileAndBundle() { 66 | let result = "Simple String" |~ () 67 | 68 | print(" Input: \"Simple String\" |~ ()") 69 | print("Expected: This is a translation of a simple string") 70 | print(" Result: \(result)") 71 | print("") 72 | 73 | XCTAssertEqual("This is a translation of a simple string", 74 | result) 75 | } 76 | 77 | func testArgumentsExampleFromAlternativeFile() { 78 | let result = "With sorting \(x), \(y), and \(z)." |~ "Alternative" 79 | 80 | print(" Input: \"With sorting \\(x), \\(y), and \\(z).\" |~ \"Alternative\"") 81 | print(" Key: With sorting %@, %@, and %@.") 82 | print("Expected: end: 42, mid: String2, start: String1") 83 | print(" Result: \(result)") 84 | print("") 85 | 86 | XCTAssertEqual("end: 42, mid: String2, start: String1", 87 | result) 88 | } 89 | } 90 | -------------------------------------------------------------------------------- /DHLocalizedStringTests/DHLocalizedStringFunctionTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DHLocalizedStringFunctionTests.swift 3 | // DHLocalizedString 4 | // 5 | // Created by Daniel Höpfl on 02.11.15. 6 | // Copyright © 2015 Daniel Höpfl. All rights reserved. 7 | // 8 | 9 | import XCTest 10 | @testable import DHLocalizedString 11 | 12 | class DHLocalizedStringFunctionTests: XCTestCase { 13 | let x = "String1" 14 | let y = "String2" 15 | let z = 42 16 | 17 | var alternativeBundle: NSBundle = NSBundle.mainBundle() 18 | 19 | override func setUp() { 20 | super.setUp() 21 | 22 | DHLocalizedStringStore.mainBundle = NSBundle(forClass: DHLocalizedStringFunctionTests.self); 23 | 24 | let path = DHLocalizedStringStore.mainBundle.resourcePath! 25 | alternativeBundle = NSBundle(path: path + "/DHLocalizedStringAlternative.bundle")! 26 | } 27 | 28 | func testSimpleExampleFromAlternativeFile() { 29 | let result = DHLocalizedString("Simple String", tableName: "Alternative") 30 | 31 | print(" Input: DHLocalizedString(\"Simple String\", tableName: \"Alternative\")") 32 | print("Expected: Translation of simple string (alternative file)") 33 | print(" Result: \(result)") 34 | print("") 35 | 36 | XCTAssertEqual("Translation of simple string (alternative file)", 37 | result) 38 | } 39 | 40 | func testSimpleExampleFromAlternativeBundle() { 41 | let result = DHLocalizedString("Simple String", bundle: alternativeBundle) 42 | 43 | print(" Input: DHLocalizedString(\"Simple String\", bundle: alternativeBundle)") 44 | print("Expected: Translation in Alternative Bundle") 45 | print(" Result: \(result)") 46 | print("") 47 | 48 | XCTAssertEqual("Translation in Alternative Bundle", 49 | result) 50 | } 51 | 52 | 53 | func testSimpleExampleFromAlternativeFileAndBundle() { 54 | let result = DHLocalizedString("Simple String", tableName: "Alternative", bundle: alternativeBundle) 55 | 56 | print(" Input: DHLocalizedString(\"Simple String\", tableName: \"Alternative\", bundle: alternativeBundle))") 57 | print("Expected: Translation in Alternative Bundle, Alternative file") 58 | print(" Result: \(result)") 59 | print("") 60 | 61 | XCTAssertEqual("Translation in Alternative Bundle, Alternative file", 62 | result) 63 | } 64 | 65 | func testSimpleExampleFromMainFileAndBundle() { 66 | let result = DHLocalizedString("Simple String") 67 | 68 | print(" Input: \"Simple String\" |~ ()") 69 | print("Expected: This is a translation of a simple string") 70 | print(" Result: \(result)") 71 | print("") 72 | 73 | XCTAssertEqual("This is a translation of a simple string", 74 | result) 75 | } 76 | 77 | func testArgumentsExampleFromAlternativeFile() { 78 | let result = DHLocalizedString("With sorting \(x), \(y), and \(z).", tableName: "Alternative") 79 | 80 | print(" Input: \"With sorting \\(x), \\(y), and \\(z).\" |~ \"Alternative\"") 81 | print(" Key: With sorting %@, %@, and %@.") 82 | print("Expected: end: 42, mid: String2, start: String1") 83 | print(" Result: \(result)") 84 | print("") 85 | 86 | XCTAssertEqual("end: 42, mid: String2, start: String1", 87 | result) 88 | } 89 | } 90 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # DHLocalizedString 2 | 3 | This is an idea on how to implement NSLocalizedString string localization in Swift. 4 | 5 | 6 | 7 | # Usage 8 | 9 | Given the `Localizable.strings` file: 10 | 11 | ``` 12 | "%@ loves %@" = "%2$@ ♥️ %1$@"; 13 | ``` 14 | 15 | 16 | ## Simplyfied usage (postfix notation) 17 | 18 | ``` 19 | let personA = "Alice" 20 | let personB = "Bob" 21 | 22 | let localized = "\(personA) loves \(personB)."|~ 23 | ``` 24 | 25 | results in: 26 | 27 | ``` 28 | localized = "Bob ♥️ Alice" 29 | ``` 30 | 31 | 32 | ## Extended usage (infix notation) 33 | 34 | There are four alternatives for the infix notation: 35 | 36 | ### Empty infix 37 | 38 | ``` 39 | let localized = "\(personA) loves \(personB)." |~ () 40 | ``` 41 | 42 | … searches for the key "%@ loves %@" in `Localizable.strings` of `mainBundle()`. 43 | 44 | ### Specific table infix (use given table name in `mainBundle()`) 45 | 46 | ``` 47 | let localized = "\(personA) loves \(personB)." |~ ("Flowerpower") 48 | ``` 49 | 50 | … searches for the key "%@ loves %@" in `Flowerpower.strings` of `mainBundle()`. 51 | 52 | ### Specific bundle infix (use `Localizable.strings` from given bundle) 53 | 54 | ``` 55 | let bundle = NSBundle(identifier: "com.example.bundle") 56 | let localized = "\(personA) loves \(personB)." |~ (bundle) 57 | ``` 58 | … searches for the key "%@ loves %@" in `Localizable.strings` of the bundle with identifier `com.example.bundle`. 59 | 60 | ### Fully specified infix (use given table name in given bundle) 61 | 62 | ``` 63 | let bundle = NSBundle(identifier: "com.example.bundle") 64 | let localized = "\(personA) loves \(personB)." |~ ("Flowerpower", bundle) 65 | ``` 66 | … searches for the key "%@ loves %@" in `Flowerpower.strings` of the bundle with identifier `com.example.bundle`. 67 | 68 | 69 | ## Functional usage 70 | 71 | ### Default call 72 | 73 | ``` 74 | let localized = DHLocalizedString("\(personA) loves \(personB).") 75 | ``` 76 | 77 | … searches for the key "%@ loves %@" in `Localizable.strings` of `mainBundle()`. 78 | 79 | ### Specific table call (use given table name in `mainBundle()`) 80 | 81 | ``` 82 | let localized = DHLocalizedString("\(personA) loves \(personB).", tableName: "Flowerpower") 83 | ``` 84 | 85 | … searches for the key "%@ loves %@" in `Flowerpower.strings` of `mainBundle()`. 86 | 87 | ### Specific bundle call (use `Localizable.strings` from given bundle) 88 | 89 | ``` 90 | let bundle = NSBundle(identifier: "com.example.bundle") 91 | let localized = DHLocalizedString("\(personA) loves \(personB).", bundle: bundle) 92 | ``` 93 | … searches for the key "%@ loves %@" in `Localizable.strings` of the bundle with identifier `com.example.bundle`. 94 | 95 | ### Fully specified call (use given table name in given bundle) 96 | 97 | ``` 98 | let bundle = NSBundle(identifier: "com.example.bundle") 99 | let localized = DHLocalizedString("\(personA) loves \(personB).", tableName: "Flowerpower", bundle: bundle) 100 | ``` 101 | … searches for the key "%@ loves %@" in `Flowerpower.strings` of the bundle with identifier `com.example.bundle`. 102 | 103 | 104 | 105 | # Notes 106 | 107 | The operator `|~` looks a bit like a flag. 108 | 109 | In your `Localizable.strings` file, replace all interpolations with `%@`, regardless of the type of the interpolation. Do not use `%@` as part of the key. You may use positional parameters in the translated string, as shown above. 110 | 111 | See [LICENSE](./LICENSE) for license information. -------------------------------------------------------------------------------- /DHLocalizedString/DHLocalizedString.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DHLocalizedString.swift 3 | // DHLocalizedString 4 | // 5 | // Created by Daniel Höpfl on 02.11.15. 6 | // Copyright © 2015 Daniel Höpfl. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | /** 12 | A helper class to localize any Swift string, including Swift strings that contain interpolations. 13 | 14 | - Usage: Use it by casting a string to `DHLocalizedString` or by calling the postfix operator `|~` on a Swift string. 15 | 16 | - Localized: An instance that has been localized. 17 | - Segment: An instance that holds a segment of an interpolated string. 18 | */ 19 | enum DHLocalizedStringStore : StringInterpolationConvertible, StringLiteralConvertible, CustomDebugStringConvertible, CustomStringConvertible { 20 | static var mainBundle = NSBundle.mainBundle() 21 | 22 | // Kinds of strings 23 | 24 | case StringLiteral(literal: String, tableName: String?, bundle: NSBundle) 25 | case StringInterpolation(strings: [DHLocalizedStringStore], tableName: String?, bundle: NSBundle) 26 | case Segment(data: Any) 27 | 28 | // MARK: StringLiteralConvertible 29 | 30 | typealias ExtendedGraphemeClusterLiteralType = StringLiteralType 31 | typealias UnicodeScalarLiteralType = StringLiteralType 32 | 33 | init(unicodeScalarLiteral value: UnicodeScalarLiteralType) { 34 | self = .StringLiteral(literal: "\(value)", tableName: nil, bundle: DHLocalizedStringStore.mainBundle) 35 | } 36 | 37 | init(extendedGraphemeClusterLiteral value: ExtendedGraphemeClusterLiteralType) { 38 | self = .StringLiteral(literal: "\(value)", tableName: nil, bundle: DHLocalizedStringStore.mainBundle) 39 | } 40 | 41 | init(stringLiteral value: StringLiteralType) { 42 | self = .StringLiteral(literal: "\(value)", tableName: nil, bundle: DHLocalizedStringStore.mainBundle) 43 | } 44 | 45 | // MARK: StringInterpolationConvertible 46 | 47 | init(stringInterpolation strings: DHLocalizedStringStore...) { 48 | self = .StringInterpolation(strings: strings, tableName: nil, bundle: DHLocalizedStringStore.mainBundle) 49 | } 50 | 51 | init(stringInterpolationSegment expr: T) { 52 | self = .Segment(data: expr) 53 | } 54 | 55 | // MARK: CustomStringConvertible 56 | 57 | var description: String { 58 | switch self { 59 | case StringLiteral(let string, let tableName, let bundle): 60 | return bundle.localizedStringForKey(string, value: nil, table: tableName) 61 | case StringInterpolation(let strings, let tableName, let bundle): 62 | var toggle = true 63 | let i18nString = strings.reduce("") { 64 | wholeString, part in 65 | 66 | toggle = !toggle 67 | if toggle { 68 | return "\(wholeString)%@" 69 | } else { 70 | return "\(wholeString)\(part.string)" 71 | } 72 | } 73 | toggle = true; 74 | let args = strings.filter({ (element) -> Bool in 75 | toggle = !toggle 76 | return toggle 77 | }).map { (argument) -> CVarArgType in 78 | return argument.string 79 | } 80 | let localizedString = withVaList(args) { (cvalistpointer) -> String in 81 | let format = bundle.localizedStringForKey(i18nString, value: nil, table: tableName) 82 | return NSString(format: format, arguments: cvalistpointer) as String 83 | } 84 | 85 | return localizedString 86 | case Segment(let data): 87 | return "\(data)" 88 | } 89 | } 90 | 91 | // MARK: CustomDebugStringConvertible 92 | 93 | var debugDescription: String { 94 | switch self { 95 | case StringLiteral(let string, let tableName, let bundle): 96 | return "[DHLocalizedStringStore.StringLiteral(\(string), \(tableName), \(bundle)) -> \(self.description)]" 97 | case StringInterpolation(let strings, let tableName, let bundle): 98 | return "[DHLocalizedStringStore.StringInterpolation(\(strings), \(tableName), \(bundle)) -> \(self.description)]" 99 | case Segment(let data): 100 | return "[DHLocalizedStringStore.Segment(\(data)]" 101 | } 102 | } 103 | 104 | // MARK: Custom function 105 | 106 | var string: String { 107 | switch self { 108 | case .StringLiteral(let literal, _, _): 109 | return literal 110 | case .StringInterpolation(let strings, _, _): 111 | return strings.reduce("", combine: { (complete, part) -> String in 112 | return "\(complete)\(part.string)" 113 | }) 114 | case .Segment(let data): 115 | return "\(data)" 116 | } 117 | } 118 | } 119 | 120 | // MARK: Postfix operator 121 | 122 | postfix operator |~ { } 123 | postfix func |~ (value: DHLocalizedStringStore) -> String { 124 | return value.description 125 | } 126 | 127 | // MARK: Infix operator 128 | 129 | infix operator |~ {} 130 | func |~ (left: DHLocalizedStringStore, bundle: (NSBundle)) -> String { 131 | switch left { 132 | case .StringLiteral(let literal, let tableName, _): 133 | return DHLocalizedStringStore.StringLiteral(literal: literal, tableName: tableName, bundle: bundle).description 134 | case .StringInterpolation(let strings, let tableName, _): 135 | return DHLocalizedStringStore.StringInterpolation(strings: strings, tableName: tableName, bundle: bundle).description 136 | case .Segment(_): 137 | return left.description 138 | } 139 | } 140 | func |~ (left: DHLocalizedStringStore, tableNameAndBundle: (String, NSBundle)) -> String { 141 | let (tableName, bundle) = tableNameAndBundle 142 | 143 | switch left { 144 | case .StringLiteral(let literal, _, _): 145 | return DHLocalizedStringStore.StringLiteral(literal: literal, tableName: tableName, bundle: bundle).description 146 | case .StringInterpolation(let strings, _, _): 147 | return DHLocalizedStringStore.StringInterpolation(strings: strings, tableName: tableName, bundle: bundle).description 148 | case .Segment(_): 149 | return left.description 150 | } 151 | } 152 | func |~ (left: DHLocalizedStringStore, tableName: (String)) -> String { 153 | switch left { 154 | case .StringLiteral(let literal, _, let bundle): 155 | return DHLocalizedStringStore.StringLiteral(literal: literal, tableName: tableName, bundle: bundle).description 156 | case .StringInterpolation(let strings, _, let bundle): 157 | return DHLocalizedStringStore.StringInterpolation(strings: strings, tableName: tableName, bundle: bundle).description 158 | case .Segment(_): 159 | return left.description 160 | } 161 | } 162 | func |~ (left: DHLocalizedStringStore, rhs: Void) -> String { 163 | return left.description 164 | } 165 | 166 | // MARK: Functional interface 167 | 168 | func DHLocalizedString(string: DHLocalizedStringStore, tableName: String? = nil, bundle: NSBundle? = nil) -> String { 169 | if let tableName = tableName { 170 | if let bundle = bundle { 171 | return string |~ (tableName, bundle) 172 | } else { 173 | return string |~ (tableName) 174 | } 175 | } 176 | 177 | if let bundle = bundle { 178 | return string |~ (bundle) 179 | } 180 | 181 | return string |~ () 182 | } -------------------------------------------------------------------------------- /DHLocalizedString.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | AC4B8A8E1BE9F03300C48A44 /* DHLocalizedStringFunctionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC4B8A8D1BE9F03300C48A44 /* DHLocalizedStringFunctionTests.swift */; }; 11 | AC4B8A8F1BE9F03300C48A44 /* DHLocalizedStringFunctionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC4B8A8D1BE9F03300C48A44 /* DHLocalizedStringFunctionTests.swift */; }; 12 | AC8354C91BE808780015B0A1 /* Alternative.strings in Resources */ = {isa = PBXBuildFile; fileRef = AC8354C61BE808780015B0A1 /* Alternative.strings */; }; 13 | AC8354CB1BE808780015B0A1 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = AC8354C81BE808780015B0A1 /* Localizable.strings */; }; 14 | AC8354D11BE80A310015B0A1 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = AC8354C81BE808780015B0A1 /* Localizable.strings */; }; 15 | AC8354D21BE80A310015B0A1 /* Alternative.strings in Resources */ = {isa = PBXBuildFile; fileRef = AC8354C61BE808780015B0A1 /* Alternative.strings */; }; 16 | AC8355281BE80CF80015B0A1 /* DHLocalizedStringInfixTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC8354BF1BE808560015B0A1 /* DHLocalizedStringInfixTests.swift */; }; 17 | AC8355291BE80CFA0015B0A1 /* DHLocalizedStringPostfixTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC8354C01BE808560015B0A1 /* DHLocalizedStringPostfixTests.swift */; }; 18 | AC83552C1BE80D100015B0A1 /* DHLocalizedString.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AC8355111BE80C590015B0A1 /* DHLocalizedString.framework */; }; 19 | AC83552F1BE80D1E0015B0A1 /* DHLocalizedStringAlternative.bundle in Resources */ = {isa = PBXBuildFile; fileRef = AC8354D61BE80A310015B0A1 /* DHLocalizedStringAlternative.bundle */; }; 20 | AC8355301BE80D5F0015B0A1 /* DHLocalizedString.h in Headers */ = {isa = PBXBuildFile; fileRef = AC8354BB1BE807590015B0A1 /* DHLocalizedString.h */; settings = {ATTRIBUTES = (Public, ); }; }; 21 | AC8355311BE80D9C0015B0A1 /* DHLocalizedString.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC83549B1BE7F9300015B0A1 /* DHLocalizedString.swift */; }; 22 | AC83554D1BE80E6E0015B0A1 /* DHLocalizedString.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AC8355431BE80E6E0015B0A1 /* DHLocalizedString.framework */; }; 23 | AC83555A1BE80EAA0015B0A1 /* DHLocalizedString.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC83549B1BE7F9300015B0A1 /* DHLocalizedString.swift */; }; 24 | AC83555B1BE80EB20015B0A1 /* DHLocalizedString.h in Headers */ = {isa = PBXBuildFile; fileRef = AC8354BB1BE807590015B0A1 /* DHLocalizedString.h */; settings = {ATTRIBUTES = (Public, ); }; }; 25 | AC83555C1BE80EBE0015B0A1 /* DHLocalizedStringInfixTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC8354BF1BE808560015B0A1 /* DHLocalizedStringInfixTests.swift */; }; 26 | AC83555D1BE80EC00015B0A1 /* DHLocalizedStringPostfixTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC8354C01BE808560015B0A1 /* DHLocalizedStringPostfixTests.swift */; }; 27 | AC8355641BE80F010015B0A1 /* DHLocalizedStringAlternative.bundle in Resources */ = {isa = PBXBuildFile; fileRef = AC8353FC1BE7DD440015B0A1 /* DHLocalizedStringAlternative.bundle */; }; 28 | AC8B37F91BE89C0600F72894 /* Alternative.strings in Resources */ = {isa = PBXBuildFile; fileRef = AC8B37F81BE89C0600F72894 /* Alternative.strings */; }; 29 | AC8B37FA1BE89C0600F72894 /* Alternative.strings in Resources */ = {isa = PBXBuildFile; fileRef = AC8B37F81BE89C0600F72894 /* Alternative.strings */; }; 30 | AC8B37FC1BE89C1200F72894 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = AC8B37FB1BE89C1200F72894 /* Localizable.strings */; }; 31 | AC8B37FD1BE89C1200F72894 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = AC8B37FB1BE89C1200F72894 /* Localizable.strings */; }; 32 | /* End PBXBuildFile section */ 33 | 34 | /* Begin PBXContainerItemProxy section */ 35 | AC83552A1BE80D050015B0A1 /* PBXContainerItemProxy */ = { 36 | isa = PBXContainerItemProxy; 37 | containerPortal = AC4591911BE35F6100FB504E /* Project object */; 38 | proxyType = 1; 39 | remoteGlobalIDString = AC8355101BE80C590015B0A1; 40 | remoteInfo = DHLocalizedStringiOS; 41 | }; 42 | AC83554E1BE80E6E0015B0A1 /* PBXContainerItemProxy */ = { 43 | isa = PBXContainerItemProxy; 44 | containerPortal = AC4591911BE35F6100FB504E /* Project object */; 45 | proxyType = 1; 46 | remoteGlobalIDString = AC8355421BE80E6E0015B0A1; 47 | remoteInfo = DHLocalizedStringOSX; 48 | }; 49 | AC83555E1BE80EC60015B0A1 /* PBXContainerItemProxy */ = { 50 | isa = PBXContainerItemProxy; 51 | containerPortal = AC4591911BE35F6100FB504E /* Project object */; 52 | proxyType = 1; 53 | remoteGlobalIDString = AC8353FB1BE7DD440015B0A1; 54 | remoteInfo = DHLocalizedStringAlternativeOSX; 55 | }; 56 | AC8355651BE80F930015B0A1 /* PBXContainerItemProxy */ = { 57 | isa = PBXContainerItemProxy; 58 | containerPortal = AC4591911BE35F6100FB504E /* Project object */; 59 | proxyType = 1; 60 | remoteGlobalIDString = AC8354CD1BE80A310015B0A1; 61 | remoteInfo = DHLocalizedStringAlternativeiOS; 62 | }; 63 | /* End PBXContainerItemProxy section */ 64 | 65 | /* Begin PBXFileReference section */ 66 | AC4B8A8D1BE9F03300C48A44 /* DHLocalizedStringFunctionTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = DHLocalizedStringFunctionTests.swift; path = DHLocalizedStringTests/DHLocalizedStringFunctionTests.swift; sourceTree = SOURCE_ROOT; }; 67 | AC8353FC1BE7DD440015B0A1 /* DHLocalizedStringAlternative.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DHLocalizedStringAlternative.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; 68 | AC83549B1BE7F9300015B0A1 /* DHLocalizedString.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DHLocalizedString.swift; sourceTree = ""; }; 69 | AC8354BB1BE807590015B0A1 /* DHLocalizedString.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DHLocalizedString.h; sourceTree = ""; }; 70 | AC8354BC1BE807590015B0A1 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 71 | AC8354BF1BE808560015B0A1 /* DHLocalizedStringInfixTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = DHLocalizedStringInfixTests.swift; path = DHLocalizedStringTests/DHLocalizedStringInfixTests.swift; sourceTree = SOURCE_ROOT; }; 72 | AC8354C01BE808560015B0A1 /* DHLocalizedStringPostfixTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = DHLocalizedStringPostfixTests.swift; path = DHLocalizedStringTests/DHLocalizedStringPostfixTests.swift; sourceTree = SOURCE_ROOT; }; 73 | AC8354C51BE808660015B0A1 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = DHLocalizedStringTests/Info.plist; sourceTree = SOURCE_ROOT; }; 74 | AC8354C61BE808780015B0A1 /* Alternative.strings */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = Alternative.strings; path = DHLocalizedStringTests/DHLocalizedStringAlternative/Alternative.strings; sourceTree = SOURCE_ROOT; }; 75 | AC8354C71BE808780015B0A1 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = DHLocalizedStringTests/DHLocalizedStringAlternative/Info.plist; sourceTree = SOURCE_ROOT; }; 76 | AC8354C81BE808780015B0A1 /* Localizable.strings */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = Localizable.strings; path = DHLocalizedStringTests/DHLocalizedStringAlternative/Localizable.strings; sourceTree = SOURCE_ROOT; }; 77 | AC8354D61BE80A310015B0A1 /* DHLocalizedStringAlternative.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DHLocalizedStringAlternative.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; 78 | AC8355011BE80C350015B0A1 /* DHLocalizedStringTestsiOS.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DHLocalizedStringTestsiOS.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 79 | AC8355111BE80C590015B0A1 /* DHLocalizedString.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DHLocalizedString.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 80 | AC8355431BE80E6E0015B0A1 /* DHLocalizedString.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DHLocalizedString.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 81 | AC83554C1BE80E6E0015B0A1 /* DHLocalizedStringTestsOSX.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DHLocalizedStringTestsOSX.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 82 | AC8B37F81BE89C0600F72894 /* Alternative.strings */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = Alternative.strings; path = DHLocalizedStringTests/Alternative.strings; sourceTree = SOURCE_ROOT; }; 83 | AC8B37FB1BE89C1200F72894 /* Localizable.strings */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = Localizable.strings; path = DHLocalizedStringTests/Localizable.strings; sourceTree = SOURCE_ROOT; }; 84 | ACB497701BE89DA800F7397D /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; 85 | ACB497711BE8A1F000F7397D /* LICENSE */ = {isa = PBXFileReference; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; 86 | /* End PBXFileReference section */ 87 | 88 | /* Begin PBXFrameworksBuildPhase section */ 89 | AC8353F91BE7DD440015B0A1 /* Frameworks */ = { 90 | isa = PBXFrameworksBuildPhase; 91 | buildActionMask = 2147483647; 92 | files = ( 93 | ); 94 | runOnlyForDeploymentPostprocessing = 0; 95 | }; 96 | AC8354CF1BE80A310015B0A1 /* Frameworks */ = { 97 | isa = PBXFrameworksBuildPhase; 98 | buildActionMask = 2147483647; 99 | files = ( 100 | ); 101 | runOnlyForDeploymentPostprocessing = 0; 102 | }; 103 | AC8354FE1BE80C350015B0A1 /* Frameworks */ = { 104 | isa = PBXFrameworksBuildPhase; 105 | buildActionMask = 2147483647; 106 | files = ( 107 | AC83552C1BE80D100015B0A1 /* DHLocalizedString.framework in Frameworks */, 108 | ); 109 | runOnlyForDeploymentPostprocessing = 0; 110 | }; 111 | AC83550D1BE80C590015B0A1 /* Frameworks */ = { 112 | isa = PBXFrameworksBuildPhase; 113 | buildActionMask = 2147483647; 114 | files = ( 115 | ); 116 | runOnlyForDeploymentPostprocessing = 0; 117 | }; 118 | AC83553F1BE80E6E0015B0A1 /* Frameworks */ = { 119 | isa = PBXFrameworksBuildPhase; 120 | buildActionMask = 2147483647; 121 | files = ( 122 | ); 123 | runOnlyForDeploymentPostprocessing = 0; 124 | }; 125 | AC8355491BE80E6E0015B0A1 /* Frameworks */ = { 126 | isa = PBXFrameworksBuildPhase; 127 | buildActionMask = 2147483647; 128 | files = ( 129 | AC83554D1BE80E6E0015B0A1 /* DHLocalizedString.framework in Frameworks */, 130 | ); 131 | runOnlyForDeploymentPostprocessing = 0; 132 | }; 133 | /* End PBXFrameworksBuildPhase section */ 134 | 135 | /* Begin PBXGroup section */ 136 | AC4591901BE35F6100FB504E = { 137 | isa = PBXGroup; 138 | children = ( 139 | ACB497701BE89DA800F7397D /* README.md */, 140 | ACB497711BE8A1F000F7397D /* LICENSE */, 141 | AC8354991BE7F9300015B0A1 /* DHLocalizedString */, 142 | AC8354721BE7F8C10015B0A1 /* DHLocalizedStringTests */, 143 | AC45919A1BE35F6100FB504E /* Products */, 144 | ); 145 | sourceTree = ""; 146 | }; 147 | AC45919A1BE35F6100FB504E /* Products */ = { 148 | isa = PBXGroup; 149 | children = ( 150 | AC8355111BE80C590015B0A1 /* DHLocalizedString.framework */, 151 | AC8355431BE80E6E0015B0A1 /* DHLocalizedString.framework */, 152 | AC8355011BE80C350015B0A1 /* DHLocalizedStringTestsiOS.xctest */, 153 | AC83554C1BE80E6E0015B0A1 /* DHLocalizedStringTestsOSX.xctest */, 154 | AC8354D61BE80A310015B0A1 /* DHLocalizedStringAlternative.bundle */, 155 | AC8353FC1BE7DD440015B0A1 /* DHLocalizedStringAlternative.bundle */, 156 | ); 157 | name = Products; 158 | sourceTree = ""; 159 | }; 160 | AC8353FD1BE7DD440015B0A1 /* DHLocalizedStringAlternative */ = { 161 | isa = PBXGroup; 162 | children = ( 163 | AC8354C71BE808780015B0A1 /* Info.plist */, 164 | AC8354C61BE808780015B0A1 /* Alternative.strings */, 165 | AC8354C81BE808780015B0A1 /* Localizable.strings */, 166 | ); 167 | name = DHLocalizedStringAlternative; 168 | path = ../DHLocalizedStringAlterative; 169 | sourceTree = ""; 170 | }; 171 | AC8354721BE7F8C10015B0A1 /* DHLocalizedStringTests */ = { 172 | isa = PBXGroup; 173 | children = ( 174 | AC8354C01BE808560015B0A1 /* DHLocalizedStringPostfixTests.swift */, 175 | AC8354BF1BE808560015B0A1 /* DHLocalizedStringInfixTests.swift */, 176 | AC4B8A8D1BE9F03300C48A44 /* DHLocalizedStringFunctionTests.swift */, 177 | AC8354C51BE808660015B0A1 /* Info.plist */, 178 | AC8B37FB1BE89C1200F72894 /* Localizable.strings */, 179 | AC8B37F81BE89C0600F72894 /* Alternative.strings */, 180 | AC8353FD1BE7DD440015B0A1 /* DHLocalizedStringAlternative */, 181 | ); 182 | name = DHLocalizedStringTests; 183 | path = DHLocalizedStringOSXTests; 184 | sourceTree = ""; 185 | }; 186 | AC8354991BE7F9300015B0A1 /* DHLocalizedString */ = { 187 | isa = PBXGroup; 188 | children = ( 189 | AC83549B1BE7F9300015B0A1 /* DHLocalizedString.swift */, 190 | AC8354BB1BE807590015B0A1 /* DHLocalizedString.h */, 191 | AC8354BC1BE807590015B0A1 /* Info.plist */, 192 | ); 193 | path = DHLocalizedString; 194 | sourceTree = ""; 195 | }; 196 | /* End PBXGroup section */ 197 | 198 | /* Begin PBXHeadersBuildPhase section */ 199 | AC83550E1BE80C590015B0A1 /* Headers */ = { 200 | isa = PBXHeadersBuildPhase; 201 | buildActionMask = 2147483647; 202 | files = ( 203 | AC8355301BE80D5F0015B0A1 /* DHLocalizedString.h in Headers */, 204 | ); 205 | runOnlyForDeploymentPostprocessing = 0; 206 | }; 207 | AC8355401BE80E6E0015B0A1 /* Headers */ = { 208 | isa = PBXHeadersBuildPhase; 209 | buildActionMask = 2147483647; 210 | files = ( 211 | AC83555B1BE80EB20015B0A1 /* DHLocalizedString.h in Headers */, 212 | ); 213 | runOnlyForDeploymentPostprocessing = 0; 214 | }; 215 | /* End PBXHeadersBuildPhase section */ 216 | 217 | /* Begin PBXNativeTarget section */ 218 | AC8353FB1BE7DD440015B0A1 /* DHLocalizedStringAlternativeOSX */ = { 219 | isa = PBXNativeTarget; 220 | buildConfigurationList = AC8353FF1BE7DD440015B0A1 /* Build configuration list for PBXNativeTarget "DHLocalizedStringAlternativeOSX" */; 221 | buildPhases = ( 222 | AC8353F81BE7DD440015B0A1 /* Sources */, 223 | AC8353F91BE7DD440015B0A1 /* Frameworks */, 224 | AC8353FA1BE7DD440015B0A1 /* Resources */, 225 | ); 226 | buildRules = ( 227 | ); 228 | dependencies = ( 229 | ); 230 | name = DHLocalizedStringAlternativeOSX; 231 | productName = DHLocalizedStringAlterative; 232 | productReference = AC8353FC1BE7DD440015B0A1 /* DHLocalizedStringAlternative.bundle */; 233 | productType = "com.apple.product-type.bundle"; 234 | }; 235 | AC8354CD1BE80A310015B0A1 /* DHLocalizedStringAlternativeiOS */ = { 236 | isa = PBXNativeTarget; 237 | buildConfigurationList = AC8354D31BE80A310015B0A1 /* Build configuration list for PBXNativeTarget "DHLocalizedStringAlternativeiOS" */; 238 | buildPhases = ( 239 | AC8354CE1BE80A310015B0A1 /* Sources */, 240 | AC8354CF1BE80A310015B0A1 /* Frameworks */, 241 | AC8354D01BE80A310015B0A1 /* Resources */, 242 | ); 243 | buildRules = ( 244 | ); 245 | dependencies = ( 246 | ); 247 | name = DHLocalizedStringAlternativeiOS; 248 | productName = DHLocalizedStringAlterative; 249 | productReference = AC8354D61BE80A310015B0A1 /* DHLocalizedStringAlternative.bundle */; 250 | productType = "com.apple.product-type.bundle"; 251 | }; 252 | AC8355001BE80C350015B0A1 /* DHLocalizedStringTestsiOS */ = { 253 | isa = PBXNativeTarget; 254 | buildConfigurationList = AC8355091BE80C350015B0A1 /* Build configuration list for PBXNativeTarget "DHLocalizedStringTestsiOS" */; 255 | buildPhases = ( 256 | AC8354FD1BE80C350015B0A1 /* Sources */, 257 | AC8354FE1BE80C350015B0A1 /* Frameworks */, 258 | AC8354FF1BE80C350015B0A1 /* Resources */, 259 | ); 260 | buildRules = ( 261 | ); 262 | dependencies = ( 263 | AC8355661BE80F930015B0A1 /* PBXTargetDependency */, 264 | AC83552B1BE80D050015B0A1 /* PBXTargetDependency */, 265 | ); 266 | name = DHLocalizedStringTestsiOS; 267 | productName = DHLocalizedStringTestsiOS; 268 | productReference = AC8355011BE80C350015B0A1 /* DHLocalizedStringTestsiOS.xctest */; 269 | productType = "com.apple.product-type.bundle.unit-test"; 270 | }; 271 | AC8355101BE80C590015B0A1 /* DHLocalizedStringiOS */ = { 272 | isa = PBXNativeTarget; 273 | buildConfigurationList = AC8355221BE80C5A0015B0A1 /* Build configuration list for PBXNativeTarget "DHLocalizedStringiOS" */; 274 | buildPhases = ( 275 | AC83550C1BE80C590015B0A1 /* Sources */, 276 | AC83550D1BE80C590015B0A1 /* Frameworks */, 277 | AC83550E1BE80C590015B0A1 /* Headers */, 278 | AC83550F1BE80C590015B0A1 /* Resources */, 279 | ); 280 | buildRules = ( 281 | ); 282 | dependencies = ( 283 | ); 284 | name = DHLocalizedStringiOS; 285 | productName = NEW; 286 | productReference = AC8355111BE80C590015B0A1 /* DHLocalizedString.framework */; 287 | productType = "com.apple.product-type.framework"; 288 | }; 289 | AC8355421BE80E6E0015B0A1 /* DHLocalizedStringOSX */ = { 290 | isa = PBXNativeTarget; 291 | buildConfigurationList = AC8355541BE80E6E0015B0A1 /* Build configuration list for PBXNativeTarget "DHLocalizedStringOSX" */; 292 | buildPhases = ( 293 | AC83553E1BE80E6E0015B0A1 /* Sources */, 294 | AC83553F1BE80E6E0015B0A1 /* Frameworks */, 295 | AC8355401BE80E6E0015B0A1 /* Headers */, 296 | AC8355411BE80E6E0015B0A1 /* Resources */, 297 | ); 298 | buildRules = ( 299 | ); 300 | dependencies = ( 301 | ); 302 | name = DHLocalizedStringOSX; 303 | productName = DHLocalizedStringOSX; 304 | productReference = AC8355431BE80E6E0015B0A1 /* DHLocalizedString.framework */; 305 | productType = "com.apple.product-type.framework"; 306 | }; 307 | AC83554B1BE80E6E0015B0A1 /* DHLocalizedStringTestsOSX */ = { 308 | isa = PBXNativeTarget; 309 | buildConfigurationList = AC8355571BE80E6E0015B0A1 /* Build configuration list for PBXNativeTarget "DHLocalizedStringTestsOSX" */; 310 | buildPhases = ( 311 | AC8355481BE80E6E0015B0A1 /* Sources */, 312 | AC8355491BE80E6E0015B0A1 /* Frameworks */, 313 | AC83554A1BE80E6E0015B0A1 /* Resources */, 314 | ); 315 | buildRules = ( 316 | ); 317 | dependencies = ( 318 | AC83555F1BE80EC60015B0A1 /* PBXTargetDependency */, 319 | AC83554F1BE80E6E0015B0A1 /* PBXTargetDependency */, 320 | ); 321 | name = DHLocalizedStringTestsOSX; 322 | productName = DHLocalizedStringOSXTests; 323 | productReference = AC83554C1BE80E6E0015B0A1 /* DHLocalizedStringTestsOSX.xctest */; 324 | productType = "com.apple.product-type.bundle.unit-test"; 325 | }; 326 | /* End PBXNativeTarget section */ 327 | 328 | /* Begin PBXProject section */ 329 | AC4591911BE35F6100FB504E /* Project object */ = { 330 | isa = PBXProject; 331 | attributes = { 332 | LastSwiftUpdateCheck = 0710; 333 | LastUpgradeCheck = 0710; 334 | ORGANIZATIONNAME = "Daniel Höpfl"; 335 | TargetAttributes = { 336 | AC8353FB1BE7DD440015B0A1 = { 337 | CreatedOnToolsVersion = 7.1; 338 | }; 339 | AC8355001BE80C350015B0A1 = { 340 | CreatedOnToolsVersion = 7.1; 341 | }; 342 | AC8355101BE80C590015B0A1 = { 343 | CreatedOnToolsVersion = 7.1; 344 | }; 345 | AC8355421BE80E6E0015B0A1 = { 346 | CreatedOnToolsVersion = 7.1; 347 | }; 348 | AC83554B1BE80E6E0015B0A1 = { 349 | CreatedOnToolsVersion = 7.1; 350 | }; 351 | }; 352 | }; 353 | buildConfigurationList = AC4591941BE35F6100FB504E /* Build configuration list for PBXProject "DHLocalizedString" */; 354 | compatibilityVersion = "Xcode 3.2"; 355 | developmentRegion = English; 356 | hasScannedForEncodings = 0; 357 | knownRegions = ( 358 | en, 359 | Base, 360 | ); 361 | mainGroup = AC4591901BE35F6100FB504E; 362 | productRefGroup = AC45919A1BE35F6100FB504E /* Products */; 363 | projectDirPath = ""; 364 | projectRoot = ""; 365 | targets = ( 366 | AC8355101BE80C590015B0A1 /* DHLocalizedStringiOS */, 367 | AC8355421BE80E6E0015B0A1 /* DHLocalizedStringOSX */, 368 | AC8355001BE80C350015B0A1 /* DHLocalizedStringTestsiOS */, 369 | AC83554B1BE80E6E0015B0A1 /* DHLocalizedStringTestsOSX */, 370 | AC8354CD1BE80A310015B0A1 /* DHLocalizedStringAlternativeiOS */, 371 | AC8353FB1BE7DD440015B0A1 /* DHLocalizedStringAlternativeOSX */, 372 | ); 373 | }; 374 | /* End PBXProject section */ 375 | 376 | /* Begin PBXResourcesBuildPhase section */ 377 | AC8353FA1BE7DD440015B0A1 /* Resources */ = { 378 | isa = PBXResourcesBuildPhase; 379 | buildActionMask = 2147483647; 380 | files = ( 381 | AC8354CB1BE808780015B0A1 /* Localizable.strings in Resources */, 382 | AC8354C91BE808780015B0A1 /* Alternative.strings in Resources */, 383 | ); 384 | runOnlyForDeploymentPostprocessing = 0; 385 | }; 386 | AC8354D01BE80A310015B0A1 /* Resources */ = { 387 | isa = PBXResourcesBuildPhase; 388 | buildActionMask = 2147483647; 389 | files = ( 390 | AC8354D11BE80A310015B0A1 /* Localizable.strings in Resources */, 391 | AC8354D21BE80A310015B0A1 /* Alternative.strings in Resources */, 392 | ); 393 | runOnlyForDeploymentPostprocessing = 0; 394 | }; 395 | AC8354FF1BE80C350015B0A1 /* Resources */ = { 396 | isa = PBXResourcesBuildPhase; 397 | buildActionMask = 2147483647; 398 | files = ( 399 | AC8B37FC1BE89C1200F72894 /* Localizable.strings in Resources */, 400 | AC8B37F91BE89C0600F72894 /* Alternative.strings in Resources */, 401 | AC83552F1BE80D1E0015B0A1 /* DHLocalizedStringAlternative.bundle in Resources */, 402 | ); 403 | runOnlyForDeploymentPostprocessing = 0; 404 | }; 405 | AC83550F1BE80C590015B0A1 /* Resources */ = { 406 | isa = PBXResourcesBuildPhase; 407 | buildActionMask = 2147483647; 408 | files = ( 409 | ); 410 | runOnlyForDeploymentPostprocessing = 0; 411 | }; 412 | AC8355411BE80E6E0015B0A1 /* Resources */ = { 413 | isa = PBXResourcesBuildPhase; 414 | buildActionMask = 2147483647; 415 | files = ( 416 | ); 417 | runOnlyForDeploymentPostprocessing = 0; 418 | }; 419 | AC83554A1BE80E6E0015B0A1 /* Resources */ = { 420 | isa = PBXResourcesBuildPhase; 421 | buildActionMask = 2147483647; 422 | files = ( 423 | AC8B37FD1BE89C1200F72894 /* Localizable.strings in Resources */, 424 | AC8B37FA1BE89C0600F72894 /* Alternative.strings in Resources */, 425 | AC8355641BE80F010015B0A1 /* DHLocalizedStringAlternative.bundle in Resources */, 426 | ); 427 | runOnlyForDeploymentPostprocessing = 0; 428 | }; 429 | /* End PBXResourcesBuildPhase section */ 430 | 431 | /* Begin PBXSourcesBuildPhase section */ 432 | AC8353F81BE7DD440015B0A1 /* Sources */ = { 433 | isa = PBXSourcesBuildPhase; 434 | buildActionMask = 2147483647; 435 | files = ( 436 | ); 437 | runOnlyForDeploymentPostprocessing = 0; 438 | }; 439 | AC8354CE1BE80A310015B0A1 /* Sources */ = { 440 | isa = PBXSourcesBuildPhase; 441 | buildActionMask = 2147483647; 442 | files = ( 443 | ); 444 | runOnlyForDeploymentPostprocessing = 0; 445 | }; 446 | AC8354FD1BE80C350015B0A1 /* Sources */ = { 447 | isa = PBXSourcesBuildPhase; 448 | buildActionMask = 2147483647; 449 | files = ( 450 | AC8355281BE80CF80015B0A1 /* DHLocalizedStringInfixTests.swift in Sources */, 451 | AC4B8A8E1BE9F03300C48A44 /* DHLocalizedStringFunctionTests.swift in Sources */, 452 | AC8355291BE80CFA0015B0A1 /* DHLocalizedStringPostfixTests.swift in Sources */, 453 | ); 454 | runOnlyForDeploymentPostprocessing = 0; 455 | }; 456 | AC83550C1BE80C590015B0A1 /* Sources */ = { 457 | isa = PBXSourcesBuildPhase; 458 | buildActionMask = 2147483647; 459 | files = ( 460 | AC8355311BE80D9C0015B0A1 /* DHLocalizedString.swift in Sources */, 461 | ); 462 | runOnlyForDeploymentPostprocessing = 0; 463 | }; 464 | AC83553E1BE80E6E0015B0A1 /* Sources */ = { 465 | isa = PBXSourcesBuildPhase; 466 | buildActionMask = 2147483647; 467 | files = ( 468 | AC83555A1BE80EAA0015B0A1 /* DHLocalizedString.swift in Sources */, 469 | ); 470 | runOnlyForDeploymentPostprocessing = 0; 471 | }; 472 | AC8355481BE80E6E0015B0A1 /* Sources */ = { 473 | isa = PBXSourcesBuildPhase; 474 | buildActionMask = 2147483647; 475 | files = ( 476 | AC83555C1BE80EBE0015B0A1 /* DHLocalizedStringInfixTests.swift in Sources */, 477 | AC4B8A8F1BE9F03300C48A44 /* DHLocalizedStringFunctionTests.swift in Sources */, 478 | AC83555D1BE80EC00015B0A1 /* DHLocalizedStringPostfixTests.swift in Sources */, 479 | ); 480 | runOnlyForDeploymentPostprocessing = 0; 481 | }; 482 | /* End PBXSourcesBuildPhase section */ 483 | 484 | /* Begin PBXTargetDependency section */ 485 | AC83552B1BE80D050015B0A1 /* PBXTargetDependency */ = { 486 | isa = PBXTargetDependency; 487 | target = AC8355101BE80C590015B0A1 /* DHLocalizedStringiOS */; 488 | targetProxy = AC83552A1BE80D050015B0A1 /* PBXContainerItemProxy */; 489 | }; 490 | AC83554F1BE80E6E0015B0A1 /* PBXTargetDependency */ = { 491 | isa = PBXTargetDependency; 492 | target = AC8355421BE80E6E0015B0A1 /* DHLocalizedStringOSX */; 493 | targetProxy = AC83554E1BE80E6E0015B0A1 /* PBXContainerItemProxy */; 494 | }; 495 | AC83555F1BE80EC60015B0A1 /* PBXTargetDependency */ = { 496 | isa = PBXTargetDependency; 497 | target = AC8353FB1BE7DD440015B0A1 /* DHLocalizedStringAlternativeOSX */; 498 | targetProxy = AC83555E1BE80EC60015B0A1 /* PBXContainerItemProxy */; 499 | }; 500 | AC8355661BE80F930015B0A1 /* PBXTargetDependency */ = { 501 | isa = PBXTargetDependency; 502 | target = AC8354CD1BE80A310015B0A1 /* DHLocalizedStringAlternativeiOS */; 503 | targetProxy = AC8355651BE80F930015B0A1 /* PBXContainerItemProxy */; 504 | }; 505 | /* End PBXTargetDependency section */ 506 | 507 | /* Begin XCBuildConfiguration section */ 508 | AC4591A41BE35F6100FB504E /* Debug */ = { 509 | isa = XCBuildConfiguration; 510 | buildSettings = { 511 | ALWAYS_SEARCH_USER_PATHS = NO; 512 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 513 | CLANG_CXX_LIBRARY = "libc++"; 514 | CLANG_ENABLE_MODULES = YES; 515 | CLANG_ENABLE_OBJC_ARC = YES; 516 | CLANG_WARN_BOOL_CONVERSION = YES; 517 | CLANG_WARN_CONSTANT_CONVERSION = YES; 518 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 519 | CLANG_WARN_EMPTY_BODY = YES; 520 | CLANG_WARN_ENUM_CONVERSION = YES; 521 | CLANG_WARN_INT_CONVERSION = YES; 522 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 523 | CLANG_WARN_UNREACHABLE_CODE = YES; 524 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 525 | CODE_SIGN_IDENTITY = "-"; 526 | COPY_PHASE_STRIP = NO; 527 | DEBUG_INFORMATION_FORMAT = dwarf; 528 | ENABLE_STRICT_OBJC_MSGSEND = YES; 529 | ENABLE_TESTABILITY = YES; 530 | GCC_C_LANGUAGE_STANDARD = gnu99; 531 | GCC_DYNAMIC_NO_PIC = NO; 532 | GCC_NO_COMMON_BLOCKS = YES; 533 | GCC_OPTIMIZATION_LEVEL = 0; 534 | GCC_PREPROCESSOR_DEFINITIONS = ( 535 | "DEBUG=1", 536 | "$(inherited)", 537 | ); 538 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 539 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 540 | GCC_WARN_UNDECLARED_SELECTOR = YES; 541 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 542 | GCC_WARN_UNUSED_FUNCTION = YES; 543 | GCC_WARN_UNUSED_VARIABLE = YES; 544 | MACOSX_DEPLOYMENT_TARGET = 10.11; 545 | MTL_ENABLE_DEBUG_INFO = YES; 546 | ONLY_ACTIVE_ARCH = YES; 547 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 548 | }; 549 | name = Debug; 550 | }; 551 | AC4591A51BE35F6100FB504E /* Release */ = { 552 | isa = XCBuildConfiguration; 553 | buildSettings = { 554 | ALWAYS_SEARCH_USER_PATHS = NO; 555 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 556 | CLANG_CXX_LIBRARY = "libc++"; 557 | CLANG_ENABLE_MODULES = YES; 558 | CLANG_ENABLE_OBJC_ARC = YES; 559 | CLANG_WARN_BOOL_CONVERSION = YES; 560 | CLANG_WARN_CONSTANT_CONVERSION = YES; 561 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 562 | CLANG_WARN_EMPTY_BODY = YES; 563 | CLANG_WARN_ENUM_CONVERSION = YES; 564 | CLANG_WARN_INT_CONVERSION = YES; 565 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 566 | CLANG_WARN_UNREACHABLE_CODE = YES; 567 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 568 | CODE_SIGN_IDENTITY = "-"; 569 | COPY_PHASE_STRIP = NO; 570 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 571 | ENABLE_NS_ASSERTIONS = NO; 572 | ENABLE_STRICT_OBJC_MSGSEND = YES; 573 | GCC_C_LANGUAGE_STANDARD = gnu99; 574 | GCC_NO_COMMON_BLOCKS = YES; 575 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 576 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 577 | GCC_WARN_UNDECLARED_SELECTOR = YES; 578 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 579 | GCC_WARN_UNUSED_FUNCTION = YES; 580 | GCC_WARN_UNUSED_VARIABLE = YES; 581 | MACOSX_DEPLOYMENT_TARGET = 10.11; 582 | MTL_ENABLE_DEBUG_INFO = NO; 583 | }; 584 | name = Release; 585 | }; 586 | AC8354001BE7DD440015B0A1 /* Debug */ = { 587 | isa = XCBuildConfiguration; 588 | buildSettings = { 589 | COMBINE_HIDPI_IMAGES = YES; 590 | INFOPLIST_FILE = DHLocalizedStringTests/DHLocalizedStringAlternative/Info.plist; 591 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; 592 | PRODUCT_BUNDLE_IDENTIFIER = de.hoepfl.DHLocalizedStringAlternative; 593 | PRODUCT_NAME = DHLocalizedStringAlternative; 594 | SDKROOT = macosx; 595 | SKIP_INSTALL = YES; 596 | WRAPPER_EXTENSION = bundle; 597 | }; 598 | name = Debug; 599 | }; 600 | AC8354011BE7DD440015B0A1 /* Release */ = { 601 | isa = XCBuildConfiguration; 602 | buildSettings = { 603 | COMBINE_HIDPI_IMAGES = YES; 604 | INFOPLIST_FILE = DHLocalizedStringTests/DHLocalizedStringAlternative/Info.plist; 605 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; 606 | PRODUCT_BUNDLE_IDENTIFIER = de.hoepfl.DHLocalizedStringAlternative; 607 | PRODUCT_NAME = DHLocalizedStringAlternative; 608 | SDKROOT = macosx; 609 | SKIP_INSTALL = YES; 610 | WRAPPER_EXTENSION = bundle; 611 | }; 612 | name = Release; 613 | }; 614 | AC8354D41BE80A310015B0A1 /* Debug */ = { 615 | isa = XCBuildConfiguration; 616 | buildSettings = { 617 | COMBINE_HIDPI_IMAGES = YES; 618 | INFOPLIST_FILE = DHLocalizedStringTests/DHLocalizedStringAlternative/Info.plist; 619 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; 620 | PRODUCT_BUNDLE_IDENTIFIER = de.hoepfl.DHLocalizedStringAlternative; 621 | PRODUCT_NAME = DHLocalizedStringAlternative; 622 | SDKROOT = iphoneos; 623 | SKIP_INSTALL = YES; 624 | WRAPPER_EXTENSION = bundle; 625 | }; 626 | name = Debug; 627 | }; 628 | AC8354D51BE80A310015B0A1 /* Release */ = { 629 | isa = XCBuildConfiguration; 630 | buildSettings = { 631 | COMBINE_HIDPI_IMAGES = YES; 632 | INFOPLIST_FILE = DHLocalizedStringTests/DHLocalizedStringAlternative/Info.plist; 633 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; 634 | PRODUCT_BUNDLE_IDENTIFIER = de.hoepfl.DHLocalizedStringAlternative; 635 | PRODUCT_NAME = DHLocalizedStringAlternative; 636 | SDKROOT = iphoneos; 637 | SKIP_INSTALL = YES; 638 | WRAPPER_EXTENSION = bundle; 639 | }; 640 | name = Release; 641 | }; 642 | AC83550A1BE80C350015B0A1 /* Debug */ = { 643 | isa = XCBuildConfiguration; 644 | buildSettings = { 645 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 646 | INFOPLIST_FILE = DHLocalizedStringTests/Info.plist; 647 | IPHONEOS_DEPLOYMENT_TARGET = 9.1; 648 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 649 | PRODUCT_BUNDLE_IDENTIFIER = de.hoepfl.DHLocalizedStringTestsiOS; 650 | PRODUCT_NAME = "$(TARGET_NAME)"; 651 | SDKROOT = iphoneos; 652 | }; 653 | name = Debug; 654 | }; 655 | AC83550B1BE80C350015B0A1 /* Release */ = { 656 | isa = XCBuildConfiguration; 657 | buildSettings = { 658 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 659 | INFOPLIST_FILE = DHLocalizedStringTests/Info.plist; 660 | IPHONEOS_DEPLOYMENT_TARGET = 9.1; 661 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 662 | PRODUCT_BUNDLE_IDENTIFIER = de.hoepfl.DHLocalizedStringTestsiOS; 663 | PRODUCT_NAME = "$(TARGET_NAME)"; 664 | SDKROOT = iphoneos; 665 | VALIDATE_PRODUCT = YES; 666 | }; 667 | name = Release; 668 | }; 669 | AC8355231BE80C5A0015B0A1 /* Debug */ = { 670 | isa = XCBuildConfiguration; 671 | buildSettings = { 672 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 673 | CURRENT_PROJECT_VERSION = 1; 674 | DEFINES_MODULE = YES; 675 | DYLIB_COMPATIBILITY_VERSION = 1; 676 | DYLIB_CURRENT_VERSION = 1; 677 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 678 | INFOPLIST_FILE = DHLocalizedString/Info.plist; 679 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 680 | IPHONEOS_DEPLOYMENT_TARGET = 9.1; 681 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 682 | PRODUCT_BUNDLE_IDENTIFIER = de.hoepfl.DHLocalizedString; 683 | PRODUCT_NAME = DHLocalizedString; 684 | SDKROOT = iphoneos; 685 | SKIP_INSTALL = YES; 686 | TARGETED_DEVICE_FAMILY = "1,2"; 687 | VERSIONING_SYSTEM = "apple-generic"; 688 | VERSION_INFO_PREFIX = ""; 689 | }; 690 | name = Debug; 691 | }; 692 | AC8355241BE80C5A0015B0A1 /* Release */ = { 693 | isa = XCBuildConfiguration; 694 | buildSettings = { 695 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 696 | CURRENT_PROJECT_VERSION = 1; 697 | DEFINES_MODULE = YES; 698 | DYLIB_COMPATIBILITY_VERSION = 1; 699 | DYLIB_CURRENT_VERSION = 1; 700 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 701 | INFOPLIST_FILE = DHLocalizedString/Info.plist; 702 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 703 | IPHONEOS_DEPLOYMENT_TARGET = 9.1; 704 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 705 | PRODUCT_BUNDLE_IDENTIFIER = de.hoepfl.DHLocalizedString; 706 | PRODUCT_NAME = DHLocalizedString; 707 | SDKROOT = iphoneos; 708 | SKIP_INSTALL = YES; 709 | TARGETED_DEVICE_FAMILY = "1,2"; 710 | VALIDATE_PRODUCT = YES; 711 | VERSIONING_SYSTEM = "apple-generic"; 712 | VERSION_INFO_PREFIX = ""; 713 | }; 714 | name = Release; 715 | }; 716 | AC8355551BE80E6E0015B0A1 /* Debug */ = { 717 | isa = XCBuildConfiguration; 718 | buildSettings = { 719 | COMBINE_HIDPI_IMAGES = YES; 720 | CURRENT_PROJECT_VERSION = 1; 721 | DEFINES_MODULE = YES; 722 | DYLIB_COMPATIBILITY_VERSION = 1; 723 | DYLIB_CURRENT_VERSION = 1; 724 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 725 | FRAMEWORK_VERSION = A; 726 | INFOPLIST_FILE = DHLocalizedString/Info.plist; 727 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 728 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; 729 | PRODUCT_BUNDLE_IDENTIFIER = de.hoepfl.DHLocalizedString; 730 | PRODUCT_NAME = DHLocalizedString; 731 | SDKROOT = macosx; 732 | SKIP_INSTALL = YES; 733 | VERSIONING_SYSTEM = "apple-generic"; 734 | VERSION_INFO_PREFIX = ""; 735 | }; 736 | name = Debug; 737 | }; 738 | AC8355561BE80E6E0015B0A1 /* Release */ = { 739 | isa = XCBuildConfiguration; 740 | buildSettings = { 741 | COMBINE_HIDPI_IMAGES = YES; 742 | CURRENT_PROJECT_VERSION = 1; 743 | DEFINES_MODULE = YES; 744 | DYLIB_COMPATIBILITY_VERSION = 1; 745 | DYLIB_CURRENT_VERSION = 1; 746 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 747 | FRAMEWORK_VERSION = A; 748 | INFOPLIST_FILE = DHLocalizedString/Info.plist; 749 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 750 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; 751 | PRODUCT_BUNDLE_IDENTIFIER = de.hoepfl.DHLocalizedString; 752 | PRODUCT_NAME = DHLocalizedString; 753 | SDKROOT = macosx; 754 | SKIP_INSTALL = YES; 755 | VERSIONING_SYSTEM = "apple-generic"; 756 | VERSION_INFO_PREFIX = ""; 757 | }; 758 | name = Release; 759 | }; 760 | AC8355581BE80E6E0015B0A1 /* Debug */ = { 761 | isa = XCBuildConfiguration; 762 | buildSettings = { 763 | COMBINE_HIDPI_IMAGES = YES; 764 | INFOPLIST_FILE = DHLocalizedStringTests/Info.plist; 765 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; 766 | PRODUCT_BUNDLE_IDENTIFIER = de.hoepfl.DHLocalizedStringOSXTests; 767 | PRODUCT_NAME = "$(TARGET_NAME)"; 768 | SDKROOT = macosx; 769 | }; 770 | name = Debug; 771 | }; 772 | AC8355591BE80E6E0015B0A1 /* Release */ = { 773 | isa = XCBuildConfiguration; 774 | buildSettings = { 775 | COMBINE_HIDPI_IMAGES = YES; 776 | INFOPLIST_FILE = DHLocalizedStringTests/Info.plist; 777 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; 778 | PRODUCT_BUNDLE_IDENTIFIER = de.hoepfl.DHLocalizedStringOSXTests; 779 | PRODUCT_NAME = "$(TARGET_NAME)"; 780 | SDKROOT = macosx; 781 | }; 782 | name = Release; 783 | }; 784 | /* End XCBuildConfiguration section */ 785 | 786 | /* Begin XCConfigurationList section */ 787 | AC4591941BE35F6100FB504E /* Build configuration list for PBXProject "DHLocalizedString" */ = { 788 | isa = XCConfigurationList; 789 | buildConfigurations = ( 790 | AC4591A41BE35F6100FB504E /* Debug */, 791 | AC4591A51BE35F6100FB504E /* Release */, 792 | ); 793 | defaultConfigurationIsVisible = 0; 794 | defaultConfigurationName = Release; 795 | }; 796 | AC8353FF1BE7DD440015B0A1 /* Build configuration list for PBXNativeTarget "DHLocalizedStringAlternativeOSX" */ = { 797 | isa = XCConfigurationList; 798 | buildConfigurations = ( 799 | AC8354001BE7DD440015B0A1 /* Debug */, 800 | AC8354011BE7DD440015B0A1 /* Release */, 801 | ); 802 | defaultConfigurationIsVisible = 0; 803 | defaultConfigurationName = Release; 804 | }; 805 | AC8354D31BE80A310015B0A1 /* Build configuration list for PBXNativeTarget "DHLocalizedStringAlternativeiOS" */ = { 806 | isa = XCConfigurationList; 807 | buildConfigurations = ( 808 | AC8354D41BE80A310015B0A1 /* Debug */, 809 | AC8354D51BE80A310015B0A1 /* Release */, 810 | ); 811 | defaultConfigurationIsVisible = 0; 812 | defaultConfigurationName = Release; 813 | }; 814 | AC8355091BE80C350015B0A1 /* Build configuration list for PBXNativeTarget "DHLocalizedStringTestsiOS" */ = { 815 | isa = XCConfigurationList; 816 | buildConfigurations = ( 817 | AC83550A1BE80C350015B0A1 /* Debug */, 818 | AC83550B1BE80C350015B0A1 /* Release */, 819 | ); 820 | defaultConfigurationIsVisible = 0; 821 | defaultConfigurationName = Release; 822 | }; 823 | AC8355221BE80C5A0015B0A1 /* Build configuration list for PBXNativeTarget "DHLocalizedStringiOS" */ = { 824 | isa = XCConfigurationList; 825 | buildConfigurations = ( 826 | AC8355231BE80C5A0015B0A1 /* Debug */, 827 | AC8355241BE80C5A0015B0A1 /* Release */, 828 | ); 829 | defaultConfigurationIsVisible = 0; 830 | defaultConfigurationName = Release; 831 | }; 832 | AC8355541BE80E6E0015B0A1 /* Build configuration list for PBXNativeTarget "DHLocalizedStringOSX" */ = { 833 | isa = XCConfigurationList; 834 | buildConfigurations = ( 835 | AC8355551BE80E6E0015B0A1 /* Debug */, 836 | AC8355561BE80E6E0015B0A1 /* Release */, 837 | ); 838 | defaultConfigurationIsVisible = 0; 839 | defaultConfigurationName = Release; 840 | }; 841 | AC8355571BE80E6E0015B0A1 /* Build configuration list for PBXNativeTarget "DHLocalizedStringTestsOSX" */ = { 842 | isa = XCConfigurationList; 843 | buildConfigurations = ( 844 | AC8355581BE80E6E0015B0A1 /* Debug */, 845 | AC8355591BE80E6E0015B0A1 /* Release */, 846 | ); 847 | defaultConfigurationIsVisible = 0; 848 | defaultConfigurationName = Release; 849 | }; 850 | /* End XCConfigurationList section */ 851 | }; 852 | rootObject = AC4591911BE35F6100FB504E /* Project object */; 853 | } 854 | --------------------------------------------------------------------------------