├── 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 |
--------------------------------------------------------------------------------