diff --git a/Limelight/Base.lproj/iPad.storyboard b/Limelight/Base.lproj/iPad.storyboard
index 43338ddc..783d4ac7 100644
--- a/Limelight/Base.lproj/iPad.storyboard
+++ b/Limelight/Base.lproj/iPad.storyboard
@@ -445,11 +445,12 @@ ICAgICAgICAgICAgICA
-
+
-
-
+
+
+
diff --git a/Limelight/Base.lproj/iPhone.storyboard b/Limelight/Base.lproj/iPhone.storyboard
index 5b74ce52..e2e24e17 100644
--- a/Limelight/Base.lproj/iPhone.storyboard
+++ b/Limelight/Base.lproj/iPhone.storyboard
@@ -407,11 +407,12 @@ ICAgICAgICAgICAgIA
-
+
-
-
+
+
+
diff --git a/Limelight/Database/DataManager.h b/Limelight/Database/DataManager.h
index b852b5cc..d250fa94 100644
--- a/Limelight/Database/DataManager.h
+++ b/Limelight/Database/DataManager.h
@@ -41,7 +41,8 @@
btMouseSupport:(BOOL)btMouseSupport
// absoluteTouchMode:(BOOL)absoluteTouchMode
touchMode:(NSInteger)touchMode
- statsOverlay:(BOOL)statsOverlay
+ statsOverlayLevel:(NSInteger)statsOverlayLevel
+ statsOverlayEnabled:(BOOL)statsOverlayEnabled
unlockDisplayOrientation:(BOOL)unlockDisplayOrientation
resolutionSelected:(NSInteger)resolutionSelected
externalDisplayMode:(NSInteger)externalDisplayMode
diff --git a/Limelight/Database/DataManager.m b/Limelight/Database/DataManager.m
index 8fa7f0e2..7e2975f9 100644
--- a/Limelight/Database/DataManager.m
+++ b/Limelight/Database/DataManager.m
@@ -80,7 +80,8 @@
btMouseSupport:(BOOL)btMouseSupport
// absoluteTouchMode:(BOOL)absoluteTouchMode
touchMode:(NSInteger)touchMode
- statsOverlay:(BOOL)statsOverlay
+ statsOverlayLevel:(NSInteger)statsOverlayLevel
+ statsOverlayEnabled:(BOOL)statsOverlayEnabled
unlockDisplayOrientation:(BOOL)unlockDisplayOrientation
resolutionSelected:(NSInteger)resolutionSelected
externalDisplayMode:(NSInteger)externalDisplayMode
@@ -116,7 +117,8 @@
settingsToSave.btMouseSupport = btMouseSupport;
// settingsToSave.absoluteTouchMode = absoluteTouchMode;
settingsToSave.touchMode = [NSNumber numberWithInteger:(uint16_t)touchMode];
- settingsToSave.statsOverlay = statsOverlay;
+ settingsToSave.statsOverlayEnabled = statsOverlayEnabled;
+ settingsToSave.statsOverlayLevel = [NSNumber numberWithInteger:(uint16_t)statsOverlayLevel];
settingsToSave.unlockDisplayOrientation = unlockDisplayOrientation;
settingsToSave.resolutionSelected = [NSNumber numberWithInteger:resolutionSelected];
settingsToSave.externalDisplayMode = [NSNumber numberWithInteger:externalDisplayMode];
diff --git a/Limelight/Database/TemporarySettings.h b/Limelight/Database/TemporarySettings.h
index d0cc6da9..5dbe9e65 100644
--- a/Limelight/Database/TemporarySettings.h
+++ b/Limelight/Database/TemporarySettings.h
@@ -53,7 +53,8 @@
@property (nonatomic) BOOL btMouseSupport;
// @property (nonatomic) BOOL absoluteTouchMode;
@property (nonatomic, retain) NSNumber * touchMode;
-@property (nonatomic) BOOL statsOverlay;
+@property (nonatomic, retain) NSNumber * statsOverlayLevel;
+@property (nonatomic) BOOL statsOverlayEnabled;
@property (nonatomic) BOOL liftStreamViewForKeyboard;
@property (nonatomic) BOOL showKeyboardToolbar;
@property (nonatomic) BOOL unlockDisplayOrientation;
diff --git a/Limelight/Database/TemporarySettings.m b/Limelight/Database/TemporarySettings.m
index 87e010c5..dbc78d7c 100644
--- a/Limelight/Database/TemporarySettings.m
+++ b/Limelight/Database/TemporarySettings.m
@@ -87,7 +87,8 @@
self.btMouseSupport = settings.btMouseSupport;
// self.absoluteTouchMode = settings.absoluteTouchMode;
self.touchMode = settings.touchMode;
- self.statsOverlay = settings.statsOverlay;
+ self.statsOverlayLevel = settings.statsOverlayLevel;
+ self.statsOverlayEnabled = settings.statsOverlayEnabled;
self.keyboardToggleFingers = settings.keyboardToggleFingers;
self.oscLayoutToolFingers = settings.oscLayoutToolFingers;
self.slideToSettingsScreenEdge = settings.slideToSettingsScreenEdge;
diff --git a/Limelight/Limelight-Info.plist b/Limelight/Limelight-Info.plist
index f29ea4d0..541e31d5 100644
--- a/Limelight/Limelight-Info.plist
+++ b/Limelight/Limelight-Info.plist
@@ -74,7 +74,7 @@
armv7
UIRequiresFullScreen
-
+
UIStatusBarHidden
UISupportedInterfaceOrientations
diff --git a/Limelight/Limelight.xcdatamodeld/Moonlight v1.10.xcdatamodel/contents b/Limelight/Limelight.xcdatamodeld/Moonlight v1.10.xcdatamodel/contents
index c6733dac..e716f972 100644
--- a/Limelight/Limelight.xcdatamodeld/Moonlight v1.10.xcdatamodel/contents
+++ b/Limelight/Limelight.xcdatamodeld/Moonlight v1.10.xcdatamodel/contents
@@ -47,7 +47,8 @@
-
+
+
diff --git a/Limelight/Limelight.xcdatamodeld/Moonlight v1.6.xcdatamodel/contents b/Limelight/Limelight.xcdatamodeld/Moonlight v1.6.xcdatamodel/contents
index 39de9e94..aa610d21 100644
--- a/Limelight/Limelight.xcdatamodeld/Moonlight v1.6.xcdatamodel/contents
+++ b/Limelight/Limelight.xcdatamodeld/Moonlight v1.6.xcdatamodel/contents
@@ -1,5 +1,5 @@
-
+
@@ -31,14 +31,9 @@
-
+
-
-
-
-
-
\ No newline at end of file
diff --git a/Limelight/Limelight.xcdatamodeld/Moonlight v1.7.xcdatamodel/contents b/Limelight/Limelight.xcdatamodeld/Moonlight v1.7.xcdatamodel/contents
index 712c76a7..2f29198e 100644
--- a/Limelight/Limelight.xcdatamodeld/Moonlight v1.7.xcdatamodel/contents
+++ b/Limelight/Limelight.xcdatamodeld/Moonlight v1.7.xcdatamodel/contents
@@ -1,5 +1,5 @@
-
+
@@ -32,15 +32,10 @@
-
+
-
-
-
-
-
\ No newline at end of file
diff --git a/Limelight/Limelight.xcdatamodeld/Moonlight v1.8.xcdatamodel/contents b/Limelight/Limelight.xcdatamodeld/Moonlight v1.8.xcdatamodel/contents
index 19d6d78a..c1d0a1e2 100644
--- a/Limelight/Limelight.xcdatamodeld/Moonlight v1.8.xcdatamodel/contents
+++ b/Limelight/Limelight.xcdatamodeld/Moonlight v1.8.xcdatamodel/contents
@@ -1,5 +1,5 @@
-
+
@@ -32,16 +32,11 @@
-
+
-
-
-
-
-
\ No newline at end of file
diff --git a/Limelight/Limelight.xcdatamodeld/Moonlight v1.9.xcdatamodel/contents b/Limelight/Limelight.xcdatamodeld/Moonlight v1.9.xcdatamodel/contents
index 30a96bc0..33e91c66 100644
--- a/Limelight/Limelight.xcdatamodeld/Moonlight v1.9.xcdatamodel/contents
+++ b/Limelight/Limelight.xcdatamodeld/Moonlight v1.9.xcdatamodel/contents
@@ -1,5 +1,5 @@
-
+
@@ -32,16 +32,11 @@
-
+
-
-
-
-
-
\ No newline at end of file
diff --git a/Limelight/Localization/Localizable.xcstrings b/Limelight/Localization/Localizable.xcstrings
index 74ae4514..14708128 100644
--- a/Limelight/Localization/Localizable.xcstrings
+++ b/Limelight/Localization/Localizable.xcstrings
@@ -870,6 +870,29 @@
}
}
},
+ "FPS: %5.2f Network dropped frames: %.2f%% Network latency: %@" : {
+ "extractionState" : "manual",
+ "localizations" : {
+ "zh-Hans" : {
+ "stringUnit" : {
+ "state" : "translated",
+ "value" : "帧率: %5.2f 网络丢帧: %.2f%% 网络延迟: %@"
+ }
+ },
+ "zh-Hant" : {
+ "stringUnit" : {
+ "state" : "translated",
+ "value" : "帧率: %5.2f 网络丢帧: %.2f%% 网络延迟: %@"
+ }
+ },
+ "zh-HK" : {
+ "stringUnit" : {
+ "state" : "translated",
+ "value" : "帧率: %5.2f 网络丢帧: %.2f%% 网络延迟: %@"
+ }
+ }
+ }
+ },
"Got it!" : {
"extractionState" : "manual",
"localizations" : {
@@ -2660,31 +2683,25 @@
}
}
},
- "Video stream: %dx%d %.2f FPS (Codec: %@)\nFrames dropped by your network connection: %.2f%%\nAverage network latency: %@%@" : {
+ "Video stream: %dx%d %.2f FPS (Codec: %@)\nNetwork dropped frames: %.2f%%\nAverage network latency: %@%@" : {
"extractionState" : "manual",
"localizations" : {
- "en" : {
- "stringUnit" : {
- "state" : "translated",
- "value" : "Video stream: %dx%d %.2f FPS (Codec: %@)\nFrames dropped by your network connection: %.2f%%\nAverage network latency: %@%@"
- }
- },
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
- "value" : "视频流: %dx%d %.2f FPS (编码格式: %@)\n网络造成的丢帧: %.2f%%\n平均网络延迟: %@%@"
+ "value" : "视频流: %dx%d %.2f FPS (编解码: %@)\n网络丢帧: %.2f%%\n平均网络延迟: %@%@"
}
},
"zh-Hant" : {
"stringUnit" : {
"state" : "translated",
- "value" : "视频流: %dx%d %.2f FPS (编码格式: %@)\n网络造成的丢帧: %.2f%%\n平均网络延迟: %@%@"
+ "value" : "视频流: %dx%d %.2f FPS (编解码: %@)\n网络丢帧: %.2f%%\n平均网络延迟: %@%@"
}
},
"zh-HK" : {
"stringUnit" : {
"state" : "translated",
- "value" : "视频流: %dx%d %.2f FPS (编码格式: %@)\n网络造成的丢帧: %.2f%%\n平均网络延迟: %@%@"
+ "value" : "视频流: %dx%d %.2f FPS (编解码: %@)\n网络丢帧: %.2f%%\n平均网络延迟: %@%@"
}
}
}
diff --git a/Limelight/Stream/StreamManager.h b/Limelight/Stream/StreamManager.h
index 277d6fe4..1cef0a45 100644
--- a/Limelight/Stream/StreamManager.h
+++ b/Limelight/Stream/StreamManager.h
@@ -15,6 +15,6 @@
- (void) stopStream;
-- (NSString*) getStatsOverlayText;
+- (NSString*) getStatsOverlayText: (uint16_t) overlayLevel;
@end
diff --git a/Limelight/Stream/StreamManager.m b/Limelight/Stream/StreamManager.m
index a1c39a22..e4ce8c91 100644
--- a/Limelight/Stream/StreamManager.m
+++ b/Limelight/Stream/StreamManager.m
@@ -148,9 +148,11 @@
return TRUE;
}
-- (NSString*) getStatsOverlayText {
+- (NSString*) getStatsOverlayText: (uint16_t) overlayLevel {
video_stats_t stats;
+ // NSLog(@"overlayLevel: %d", overlayLevel);
+
if (!_connection) {
return nil;
}
@@ -169,6 +171,7 @@
}
NSString* hostProcessingString;
+ // overlayLevel 2: detailed
if (stats.framesWithHostProcessingLatency != 0) {
hostProcessingString = [LocalizationHelper localizedStringForKey:@"\nHost processing latency min/max/avg: %.1f/%.1f/%.1f ms",
stats.minHostProcessingLatency / 10.f,
@@ -180,7 +183,7 @@
}
float interval = stats.endTime - stats.startTime;
- return [LocalizationHelper localizedStringForKey:@"Video stream: %dx%d %.2f FPS (Codec: %@)\nFrames dropped by your network connection: %.2f%%\nAverage network latency: %@%@",
+ if(overlayLevel == 2) return [LocalizationHelper localizedStringForKey:@"Video stream: %dx%d %.2f FPS (Codec: %@)\nNetwork dropped frames: %.2f%%\nAverage network latency: %@%@",
_config.width,
_config.height,
stats.totalFrames / interval,
@@ -188,6 +191,10 @@
stats.networkDroppedFrames / interval,
latencyString,
hostProcessingString];
+ else return [LocalizationHelper localizedStringForKey:@"FPS: %5.2f Network dropped frames: %.2f%% Network latency: %@",
+ stats.totalFrames / interval,
+ stats.networkDroppedFrames / interval,
+ latencyString];
}
@end
diff --git a/Limelight/ViewControllers/SettingsViewController.m b/Limelight/ViewControllers/SettingsViewController.m
index 4a46a85a..a7b10cab 100644
--- a/Limelight/ViewControllers/SettingsViewController.m
+++ b/Limelight/ViewControllers/SettingsViewController.m
@@ -452,7 +452,7 @@ BOOL isCustomResolution(CGSize res) {
[self.hdrSelector setSelectedSegmentIndex:currentSettings.enableHdr ? 1 : 0];
}
- [self.statsOverlaySelector setSelectedSegmentIndex:currentSettings.statsOverlay ? 1 : 0];
+ [self.statsOverlaySelector setSelectedSegmentIndex:currentSettings.statsOverlayLevel.intValue];
[self.btMouseSelector setSelectedSegmentIndex:currentSettings.btMouseSupport ? 1 : 0];
[self.optimizeSettingsSelector setSelectedSegmentIndex:currentSettings.optimizeGames ? 1 : 0];
[self.framePacingSelector setSelectedSegmentIndex:currentSettings.useFramePacing ? 1 : 0];
@@ -1063,7 +1063,8 @@ BOOL isCustomResolution(CGSize res) {
BOOL useFramePacing = [self.framePacingSelector selectedSegmentIndex] == 1;
// BOOL absoluteTouchMode = [self.touchModeSelector selectedSegmentIndex] == 1;
NSInteger touchMode = [self.touchModeSelector selectedSegmentIndex];
- BOOL statsOverlay = [self.statsOverlaySelector selectedSegmentIndex] == 1;
+ NSInteger statsOverlayLevel = [self.statsOverlaySelector selectedSegmentIndex];
+ BOOL statsOverlayEnabled = statsOverlayLevel != 0;
BOOL enableHdr = [self.hdrSelector selectedSegmentIndex] == 1;
BOOL unlockDisplayOrientation = [self.unlockDisplayOrientationSelector selectedSegmentIndex] == 1;
NSInteger resolutionSelected = [self.resolutionSelector selectedSegmentIndex];
@@ -1097,7 +1098,8 @@ BOOL isCustomResolution(CGSize res) {
btMouseSupport:btMouseSupport
// absoluteTouchMode:absoluteTouchMode
touchMode:touchMode
- statsOverlay:statsOverlay
+ statsOverlayLevel:statsOverlayLevel
+ statsOverlayEnabled:statsOverlayEnabled
unlockDisplayOrientation:unlockDisplayOrientation
resolutionSelected:resolutionSelected
externalDisplayMode:externalDisplayMode
diff --git a/Limelight/ViewControllers/StreamFrameViewController.m b/Limelight/ViewControllers/StreamFrameViewController.m
index d46e5714..f7277533 100644
--- a/Limelight/ViewControllers/StreamFrameViewController.m
+++ b/Limelight/ViewControllers/StreamFrameViewController.m
@@ -47,6 +47,7 @@
UITapGestureRecognizer *_menuDoubleTapGestureRecognizer;
UITapGestureRecognizer *_playPauseTapGestureRecognizer;
UITextView *_overlayView;
+ uint16_t overlayLevel;
UILabel *_stageLabel;
UILabel *_tipLabel;
UIActivityIndicatorView *_spinner;
@@ -160,6 +161,7 @@
}
_settings = [[[DataManager alloc] init] getSettings]; //StreamFrameViewController retrieve the settings here.
+ overlayLevel = _settings.statsOverlayLevel.intValue;
[self configOscLayoutTool];
[self configSwipeGestures];
[self configZoomGestureAndAddStreamView];
@@ -180,7 +182,7 @@
target:self
selector:@selector(updateStatsOverlay)
userInfo:nil
- repeats:_settings.statsOverlay];
+ repeats:_settings.statsOverlayEnabled];
NSLog(@"frameview gestures: %d", (uint32_t)[self.view.gestureRecognizers count]);
NSLog(@"streamview gestures: %d", (uint32_t)[_streamView.gestureRecognizers count]);
@@ -447,13 +449,13 @@
#endif
- (void)updateStatsOverlay {
- if(!_settings.statsOverlay){
+ if(!_settings.statsOverlayEnabled){
[_overlayView removeFromSuperview];
return; // add this for realtime streamview reconfig
}
else [self.view addSubview:_overlayView]; // don't know why but this is necessary for reactivating overlay.
- NSString* overlayText = [self->_streamMan getStatsOverlayText];
+ NSString* overlayText = [self->_streamMan getStatsOverlayText:overlayLevel];
dispatch_async(dispatch_get_main_queue(), ^{
[self updateOverlayText:overlayText];
});
@@ -479,7 +481,13 @@
#if TARGET_OS_TV
[_overlayView setFont:[UIFont systemFontOfSize:24]];
#else
- [_overlayView setFont:[UIFont systemFontOfSize:12]];
+ if (@available(iOS 13.0, *)) {
+ [_overlayView setFont:[UIFont monospacedSystemFontOfSize:12 weight:UIFontWeightRegular]];
+ } else {
+ [_overlayView setFont:[UIFont systemFontOfSize:12]];// Fallback on earlier versions
+ }
+ //[_overlayView setFont:[UIFont fontWithName:@"Menlo" size:12]];
+
#endif
[_overlayView setAlpha:0.5];
[self.view addSubview:_overlayView];
@@ -675,7 +683,7 @@
[self->_controllerSupport connectionEstablished];
- if (self->_settings.statsOverlay) {
+ if (self->_settings.statsOverlayEnabled) {
self->_statsUpdateTimer = [NSTimer scheduledTimerWithTimeInterval:1.0f
target:self
selector:@selector(updateStatsOverlay)
@@ -976,7 +984,7 @@
DataManager* dataMan = [[DataManager alloc] init];
Settings *currentSettings = [dataMan retrieveSettings];
- currentSettings.statsOverlay = !currentSettings.statsOverlay;
+ currentSettings.statsOverlayEnabled = !currentSettings.statsOverlayEnabled;
[dataMan saveData];
[self reConfigStreamViewRealtime];
diff --git a/Limelight/mul.lproj/iPad.xcstrings b/Limelight/mul.lproj/iPad.xcstrings
index fc16b19c..00cff39c 100644
--- a/Limelight/mul.lproj/iPad.xcstrings
+++ b/Limelight/mul.lproj/iPad.xcstrings
@@ -1718,61 +1718,91 @@
}
},
"NLH-qN-qCo.segmentTitles[0]" : {
- "comment" : "Class = \"UISegmentedControl\"; NLH-qN-qCo.segmentTitles[0] = \"No\"; ObjectID = \"NLH-qN-qCo\";",
+ "comment" : "Class = \"UISegmentedControl\"; NLH-qN-qCo.segmentTitles[0] = \"Off\"; ObjectID = \"NLH-qN-qCo\";",
"extractionState" : "extracted_with_value",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "new",
- "value" : "No"
+ "value" : "Off"
}
},
"zh-Hans" : {
"stringUnit" : {
- "state" : "translated",
+ "state" : "needs_review",
"value" : "关闭"
}
},
"zh-Hant" : {
"stringUnit" : {
- "state" : "translated",
+ "state" : "needs_review",
"value" : "关闭"
}
},
"zh-HK" : {
"stringUnit" : {
- "state" : "translated",
+ "state" : "needs_review",
"value" : "关闭"
}
}
}
},
"NLH-qN-qCo.segmentTitles[1]" : {
- "comment" : "Class = \"UISegmentedControl\"; NLH-qN-qCo.segmentTitles[1] = \"Yes\"; ObjectID = \"NLH-qN-qCo\";",
+ "comment" : "Class = \"UISegmentedControl\"; NLH-qN-qCo.segmentTitles[1] = \"Simplified\"; ObjectID = \"NLH-qN-qCo\";",
"extractionState" : "extracted_with_value",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "new",
- "value" : "Yes"
+ "value" : "Simplified"
}
},
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
- "value" : "启用"
+ "value" : "精简"
}
},
"zh-Hant" : {
"stringUnit" : {
"state" : "translated",
- "value" : "启用"
+ "value" : "精简"
}
},
"zh-HK" : {
"stringUnit" : {
"state" : "translated",
- "value" : "启用"
+ "value" : "精简"
+ }
+ }
+ }
+ },
+ "NLH-qN-qCo.segmentTitles[2]" : {
+ "comment" : "Class = \"UISegmentedControl\"; NLH-qN-qCo.segmentTitles[2] = \"Detailed\"; ObjectID = \"NLH-qN-qCo\";",
+ "extractionState" : "extracted_with_value",
+ "localizations" : {
+ "en" : {
+ "stringUnit" : {
+ "state" : "new",
+ "value" : "Detailed"
+ }
+ },
+ "zh-Hans" : {
+ "stringUnit" : {
+ "state" : "translated",
+ "value" : "完整"
+ }
+ },
+ "zh-Hant" : {
+ "stringUnit" : {
+ "state" : "translated",
+ "value" : "完整"
+ }
+ },
+ "zh-HK" : {
+ "stringUnit" : {
+ "state" : "translated",
+ "value" : "完整"
}
}
}
diff --git a/Limelight/mul.lproj/iPhone.xcstrings b/Limelight/mul.lproj/iPhone.xcstrings
index 17c9efd7..28cdd79b 100644
--- a/Limelight/mul.lproj/iPhone.xcstrings
+++ b/Limelight/mul.lproj/iPhone.xcstrings
@@ -1940,61 +1940,91 @@
}
},
"rdz-eg-2oR.segmentTitles[0]" : {
- "comment" : "Class = \"UISegmentedControl\"; rdz-eg-2oR.segmentTitles[0] = \"No\"; ObjectID = \"rdz-eg-2oR\";",
+ "comment" : "Class = \"UISegmentedControl\"; rdz-eg-2oR.segmentTitles[0] = \"Off\"; ObjectID = \"rdz-eg-2oR\";",
"extractionState" : "extracted_with_value",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "new",
- "value" : "No"
+ "value" : "Off"
}
},
"zh-Hans" : {
"stringUnit" : {
- "state" : "translated",
+ "state" : "needs_review",
"value" : "关闭"
}
},
"zh-Hant" : {
"stringUnit" : {
- "state" : "translated",
+ "state" : "needs_review",
"value" : "关闭"
}
},
"zh-HK" : {
"stringUnit" : {
- "state" : "translated",
+ "state" : "needs_review",
"value" : "关闭"
}
}
}
},
"rdz-eg-2oR.segmentTitles[1]" : {
- "comment" : "Class = \"UISegmentedControl\"; rdz-eg-2oR.segmentTitles[1] = \"Yes\"; ObjectID = \"rdz-eg-2oR\";",
+ "comment" : "Class = \"UISegmentedControl\"; rdz-eg-2oR.segmentTitles[1] = \"Simplified\"; ObjectID = \"rdz-eg-2oR\";",
"extractionState" : "extracted_with_value",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "new",
- "value" : "Yes"
+ "value" : "Simplified"
}
},
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
- "value" : "启用"
+ "value" : "精简"
}
},
"zh-Hant" : {
"stringUnit" : {
"state" : "translated",
- "value" : "启用"
+ "value" : "精简"
}
},
"zh-HK" : {
"stringUnit" : {
"state" : "translated",
- "value" : "启用"
+ "value" : "精简"
+ }
+ }
+ }
+ },
+ "rdz-eg-2oR.segmentTitles[2]" : {
+ "comment" : "Class = \"UISegmentedControl\"; rdz-eg-2oR.segmentTitles[2] = \"Detailed\"; ObjectID = \"rdz-eg-2oR\";",
+ "extractionState" : "extracted_with_value",
+ "localizations" : {
+ "en" : {
+ "stringUnit" : {
+ "state" : "new",
+ "value" : "Detailed"
+ }
+ },
+ "zh-Hans" : {
+ "stringUnit" : {
+ "state" : "translated",
+ "value" : "完整"
+ }
+ },
+ "zh-Hant" : {
+ "stringUnit" : {
+ "state" : "translated",
+ "value" : "完整"
+ }
+ },
+ "zh-HK" : {
+ "stringUnit" : {
+ "state" : "translated",
+ "value" : "完整"
}
}
}