Skip to content
This repository was archived by the owner on Jan 16, 2021. It is now read-only.

Commit 087a901

Browse files
committed
Merge pull request #72 from ParsePlatform/nlutsenko.localized
Extract all localizable strings and use them from a table.
2 parents eaae907 + 7e70d5a commit 087a901

File tree

15 files changed

+99
-6
lines changed

15 files changed

+99
-6
lines changed

.travis.yml

+6-5
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
language: objective-c
2+
osx_image: xcode611
23
before_install:
3-
- brew update
4-
- brew reinstall xctool
4+
- gem install xcpretty -N
55
- gem install cocoapods --pre --quiet
66
- pod setup --silent
77
- pod repo update --silent
88
script:
99
- pod install
1010
- pod lib lint --quick ParseUI.podspec
1111
- pod lib lint --use-libraries ParseUI.podspec
12-
- xctool -workspace ParseUI.xcworkspace -scheme 'ParseUI' -sdk iphonesimulator build
13-
- xctool -workspace ParseUI.xcworkspace -scheme 'ParseUIDemo' -sdk iphonesimulator build
14-
- xctool -workspace ParseUI.xcworkspace -scheme 'ParseUIDemo-Swift' -sdk iphonesimulator build
12+
- set -o pipefail
13+
- xcodebuild -workspace ParseUI.xcworkspace -scheme 'ParseUI' -sdk iphonesimulator build | xcpretty -c
14+
- xcodebuild -workspace ParseUI.xcworkspace -scheme 'ParseUIDemo' -sdk iphonesimulator build | xcpretty -c
15+
- xcodebuild -workspace ParseUI.xcworkspace -scheme 'ParseUIDemo-Swift' -sdk iphonesimulator build | xcpretty -c

ParseUI.podspec

+1
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ Pod::Spec.new do |s|
2727
'ParseUI/Classes/Views/*.h',
2828
'ParseUI/Classes/Cells/*.h',
2929
'ParseUI/Other/*.h'
30+
s.resources = ['ParseUI/Resources/Localization/*.lproj']
3031
s.xcconfig = { 'OTHER_LDFLAGS' => '$(inherited) -undefined dynamic_lookup' }
3132
s.frameworks = 'Foundation',
3233
'UIKit',

ParseUI.xcodeproj/project.pbxproj

+52-1
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,8 @@
7070
8185BA7C1A642A8B002815C0 /* PFCollectionViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 8185BA7A1A642A8B002815C0 /* PFCollectionViewCell.h */; settings = {ATTRIBUTES = (Public, ); }; };
7171
8185BA7D1A642A8B002815C0 /* PFCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 8185BA7B1A642A8B002815C0 /* PFCollectionViewCell.m */; };
7272
819A4B3A1A6808EA00D01241 /* SubtitleImageCollectionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 819A4B391A6808EA00D01241 /* SubtitleImageCollectionViewController.m */; };
73+
81B3F26C1AC9EDE000A92677 /* ParseUI.strings in Resources */ = {isa = PBXBuildFile; fileRef = 81B3F26A1AC9EDE000A92677 /* ParseUI.strings */; };
74+
81B3F26E1AC9EE0000A92677 /* PFLocalization.h in Headers */ = {isa = PBXBuildFile; fileRef = 81B3F26D1AC9EE0000A92677 /* PFLocalization.h */; };
7375
81C5993F1A64346000F574E8 /* SimpleCollectionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 81C5993E1A64346000F574E8 /* SimpleCollectionViewController.m */; };
7476
81C599421A6454C900F574E8 /* PaginatedCollectionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 81C599411A6454C900F574E8 /* PaginatedCollectionViewController.m */; };
7577
81C599451A645A9100F574E8 /* PFActivityIndicatorCollectionReusableView.h in Headers */ = {isa = PBXBuildFile; fileRef = 81C599431A645A9100F574E8 /* PFActivityIndicatorCollectionReusableView.h */; };
@@ -186,6 +188,8 @@
186188
8185BA7B1A642A8B002815C0 /* PFCollectionViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PFCollectionViewCell.m; sourceTree = "<group>"; };
187189
819A4B381A6808EA00D01241 /* SubtitleImageCollectionViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SubtitleImageCollectionViewController.h; sourceTree = "<group>"; };
188190
819A4B391A6808EA00D01241 /* SubtitleImageCollectionViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SubtitleImageCollectionViewController.m; sourceTree = "<group>"; };
191+
81B3F26B1AC9EDE000A92677 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/ParseUI.strings; sourceTree = "<group>"; };
192+
81B3F26D1AC9EE0000A92677 /* PFLocalization.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PFLocalization.h; sourceTree = "<group>"; };
189193
81C5993D1A64346000F574E8 /* SimpleCollectionViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SimpleCollectionViewController.h; sourceTree = "<group>"; };
190194
81C5993E1A64346000F574E8 /* SimpleCollectionViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SimpleCollectionViewController.m; sourceTree = "<group>"; };
191195
81C599401A6454C900F574E8 /* PaginatedCollectionViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PaginatedCollectionViewController.h; sourceTree = "<group>"; };
@@ -312,6 +316,7 @@
312316
810D6BFC19F7F005005B3DB2 /* Extensions */,
313317
810D6C0519F7F005005B3DB2 /* PFImageCache.h */,
314318
810D6C0619F7F006005B3DB2 /* PFImageCache.m */,
319+
81B3F26D1AC9EE0000A92677 /* PFLocalization.h */,
315320
810D6C0719F7F006005B3DB2 /* Views */,
316321
);
317322
path = Internal;
@@ -381,6 +386,7 @@
381386
isa = PBXGroup;
382387
children = (
383388
811B095A1A0843B9008B3393 /* Info.plist */,
389+
81B3F2691AC9EDE000A92677 /* Localization */,
384390
);
385391
name = Resources;
386392
path = ParseUI/Generated;
@@ -536,6 +542,15 @@
536542
path = QueryCollectionViewController;
537543
sourceTree = "<group>";
538544
};
545+
81B3F2691AC9EDE000A92677 /* Localization */ = {
546+
isa = PBXGroup;
547+
children = (
548+
81B3F26A1AC9EDE000A92677 /* ParseUI.strings */,
549+
);
550+
name = Localization;
551+
path = ParseUI/Resources/Localization;
552+
sourceTree = SOURCE_ROOT;
553+
};
539554
81C5993C1A64344800F574E8 /* QueryCollectionViewController */ = {
540555
isa = PBXGroup;
541556
children = (
@@ -736,6 +751,7 @@
736751
81ED075719F68028009745F4 /* PFLogInViewController.h in Headers */,
737752
810D6C2519F7F006005B3DB2 /* PFPrimaryButton.h in Headers */,
738753
810D6C2319F7F006005B3DB2 /* PFDismissButton.h in Headers */,
754+
81B3F26E1AC9EE0000A92677 /* PFLocalization.h in Headers */,
739755
810D6C2719F7F006005B3DB2 /* PFTextButton.h in Headers */,
740756
81ED077C19F6809F009745F4 /* PFTableViewCell.h in Headers */,
741757
8185BA781A64241B002815C0 /* PFQueryCollectionViewController.h in Headers */,
@@ -790,10 +806,12 @@
790806
isa = PBXNativeTarget;
791807
buildConfigurationList = 1DEB921E08733DC00010E9CD /* Build configuration list for PBXNativeTarget "ParseUI" */;
792808
buildPhases = (
793-
D2AAC07A0554694100DB518D /* Headers */,
809+
81B3F2561AC9E70F00A92677 /* Generate Localizable Strings */,
794810
81E9CD3D19F5781700487B0F /* Convert Images to Code */,
811+
D2AAC07A0554694100DB518D /* Headers */,
795812
D2AAC07B0554694100DB518D /* Sources */,
796813
D2AAC07C0554694100DB518D /* Frameworks */,
814+
81B3F25B1AC9E85D00A92677 /* Resources */,
797815
);
798816
buildRules = (
799817
);
@@ -884,6 +902,14 @@
884902
);
885903
runOnlyForDeploymentPostprocessing = 0;
886904
};
905+
81B3F25B1AC9E85D00A92677 /* Resources */ = {
906+
isa = PBXResourcesBuildPhase;
907+
buildActionMask = 2147483647;
908+
files = (
909+
81B3F26C1AC9EDE000A92677 /* ParseUI.strings in Resources */,
910+
);
911+
runOnlyForDeploymentPostprocessing = 0;
912+
};
887913
/* End PBXResourcesBuildPhase section */
888914

889915
/* Begin PBXShellScriptBuildPhase section */
@@ -932,6 +958,20 @@
932958
shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods/Pods-resources.sh\"\n";
933959
showEnvVarsInLog = 0;
934960
};
961+
81B3F2561AC9E70F00A92677 /* Generate Localizable Strings */ = {
962+
isa = PBXShellScriptBuildPhase;
963+
buildActionMask = 2147483647;
964+
files = (
965+
);
966+
inputPaths = (
967+
);
968+
name = "Generate Localizable Strings";
969+
outputPaths = (
970+
);
971+
runOnlyForDeploymentPostprocessing = 0;
972+
shellPath = /bin/sh;
973+
shellScript = "// Extract all strings\nfind $PROJECT_DIR/ParseUI/Classes -name '*.m' -print0 | xargs -0 genstrings -q -o $PROJECT_DIR/ParseUI/Resources/Localization/en.lproj\nmv $PROJECT_DIR/ParseUI/Resources/Localization/en.lproj/Localizable.strings $PROJECT_DIR/ParseUI/Resources/Localization/en.lproj/ParseUI.strings";
974+
};
935975
81E9CD3D19F5781700487B0F /* Convert Images to Code */ = {
936976
isa = PBXShellScriptBuildPhase;
937977
buildActionMask = 2147483647;
@@ -1043,6 +1083,17 @@
10431083
};
10441084
/* End PBXSourcesBuildPhase section */
10451085

1086+
/* Begin PBXVariantGroup section */
1087+
81B3F26A1AC9EDE000A92677 /* ParseUI.strings */ = {
1088+
isa = PBXVariantGroup;
1089+
children = (
1090+
81B3F26B1AC9EDE000A92677 /* en */,
1091+
);
1092+
name = ParseUI.strings;
1093+
sourceTree = "<group>";
1094+
};
1095+
/* End PBXVariantGroup section */
1096+
10461097
/* Begin XCBuildConfiguration section */
10471098
1DEB921F08733DC00010E9CD /* Debug */ = {
10481099
isa = XCBuildConfiguration;

ParseUI/Classes/Cells/PFPurchaseTableViewCell.m

+1
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
#import "PFPurchaseTableViewCell.h"
2323

24+
#import "PFLocalization.h"
2425
#import "PFRect.h"
2526

2627
@interface PFPurchaseTableViewCell ()

ParseUI/Classes/Internal/Extensions/PFAlertView.m

+2
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121

2222
#import "PFAlertView.h"
2323

24+
#import "PFLocalization.h"
25+
2426
@implementation PFUIAlertView
2527

2628
+ (void)showAlertViewWithTitle:(NSString *)title
+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
/*
2+
* Copyright (c) 2014, Parse, LLC. All rights reserved.
3+
*
4+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to use,
5+
* copy, modify, and distribute this software in source code or binary form for use
6+
* in connection with the web services and APIs provided by Parse.
7+
*
8+
* As with any software that integrates with the Parse platform, your use of
9+
* this software is subject to the Parse Terms of Service
10+
* [https://www.parse.com/about/terms]. This copyright notice shall be
11+
* included in 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, FITNESS
15+
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
16+
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
17+
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
18+
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
19+
*
20+
*/
21+
22+
#ifndef ParseUI_PFLocalization_h
23+
#define ParseUI_PFLocalization_h
24+
25+
#undef NSLocalizedString
26+
#define NSLocalizedString(key, comment) \
27+
[[NSBundle mainBundle] localizedStringForKey:key value:nil table:@"ParseUI"]
28+
29+
#endif

ParseUI/Classes/Internal/Views/PFLoadingView.m

+1
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
#import "PFLoadingView.h"
2323

2424
#import "PFRect.h"
25+
#import "PFLocalization.h"
2526

2627
@interface PFLoadingView ()
2728

ParseUI/Classes/LogInViewController/PFLogInView.m

+1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
#import "PFColor.h"
2626
#import "PFDismissButton.h"
2727
#import "PFImage.h"
28+
#import "PFLocalization.h"
2829
#import "PFPrimaryButton.h"
2930
#import "PFRect.h"
3031
#import "PFTextButton.h"

ParseUI/Classes/LogInViewController/PFLogInViewController.m

+1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525

2626
#import "PFActionButton.h"
2727
#import "PFAlertView.h"
28+
#import "PFLocalization.h"
2829
#import "PFPrimaryButton.h"
2930
#import "PFSignUpViewController.h"
3031
#import "PFTextField.h"

ParseUI/Classes/ProductTableViewController/PFProductTableViewController.m

+1
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
#import <Parse/PFQuery.h>
2727

2828
#import "PFAlertView.h"
29+
#import "PFLocalization.h"
2930
#import "PFPurchaseTableViewCell.h"
3031

3132
static NSString *const PFProductMetadataPriceKey = @"price";

ParseUI/Classes/QueryCollectionViewController/PFQueryCollectionViewController.m

+1
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
#import "PFCollectionViewCell.h"
2828
#import "PFImageView.h"
2929
#import "PFLoadingView.h"
30+
#import "PFLocalization.h"
3031

3132
static NSString *const PFQueryCollectionViewCellIdentifier = @"cell";
3233
static NSString *const PFQueryCollectionViewNextPageReusableViewIdentifier = @"nextPageView";

ParseUI/Classes/QueryTableViewController/PFQueryTableViewController.m

+1
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
#import "PFActivityIndicatorTableViewCell.h"
2727
#import "PFImageView.h"
2828
#import "PFLoadingView.h"
29+
#import "PFLocalization.h"
2930
#import "PFTableViewCell.h"
3031

3132
// Add headers to kill any warnings.

ParseUI/Classes/SignUpViewController/PFSignUpView.m

+1
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
#import "PFColor.h"
2525
#import "PFDismissButton.h"
2626
#import "PFImage.h"
27+
#import "PFLocalization.h"
2728
#import "PFPrimaryButton.h"
2829
#import "PFRect.h"
2930
#import "PFTextButton.h"

ParseUI/Classes/SignUpViewController/PFSignUpViewController.m

+1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
#import <Parse/PFUser.h>
2626

2727
#import "PFAlertView.h"
28+
#import "PFLocalization.h"
2829
#import "PFPrimaryButton.h"
2930
#import "PFTextField.h"
3031

Binary file not shown.

0 commit comments

Comments
 (0)