From 07640dce698cce99488f9e3c00a90e7ffd5e2e4b Mon Sep 17 00:00:00 2001 From: Jiayan Zhuang Date: Thu, 6 Aug 2020 14:33:18 -0700 Subject: [PATCH] Build the basic RCTLocalizationProvider Summary: Changelog: [Internal][Add] - Build the basic RCTLocalizationProvider RCTLocalizationProvider is to enable the localization in fabric. But I'd start with internal apps now. Reviewed By: PeteTheHeat Differential Revision: D22704051 fbshipit-source-id: 845693a131c325f3c3d92b2ff491d5421966ad3e --- React/Fabric/RCTLocalizationProvider.h | 36 ++++++++++++++++++++++ React/Fabric/RCTLocalizationProvider.mm | 40 +++++++++++++++++++++++++ 2 files changed, 76 insertions(+) create mode 100644 React/Fabric/RCTLocalizationProvider.h create mode 100644 React/Fabric/RCTLocalizationProvider.mm diff --git a/React/Fabric/RCTLocalizationProvider.h b/React/Fabric/RCTLocalizationProvider.h new file mode 100644 index 00000000000..be98107c6f6 --- /dev/null +++ b/React/Fabric/RCTLocalizationProvider.h @@ -0,0 +1,36 @@ +/* + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +#import +#import + +@protocol RCTLocalizationProtocol + +/* + Call for other apps to use their own translation functions + */ +- (NSString *)localizedString:(NSString *)oldString withDescription:(NSString *)description; + +@end + +/* + * It allows to set delegate for RCTLocalizationProvider so that we could ask APPs to do translations. + * It's an experimental feature. + */ +RCT_EXTERN void setLocalizationDelegate(id delegate); + +/* + * It allows apps to provide their translated language pack in case the cannot do translation reactively. + * It's an experimental feature. + */ +RCT_EXTERN void setLocalizationLanguagePack(NSDictionary *pack); + +@interface RCTLocalizationProvider : NSObject + ++ (NSString *)RCTLocalizedString:(NSString *)oldString withDescription:(NSString *)description; + +@end diff --git a/React/Fabric/RCTLocalizationProvider.mm b/React/Fabric/RCTLocalizationProvider.mm new file mode 100644 index 00000000000..4359af2527e --- /dev/null +++ b/React/Fabric/RCTLocalizationProvider.mm @@ -0,0 +1,40 @@ +/* + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +#import "RCTLocalizationProvider.h" + +#import + +static id _delegate = nil; +static NSDictionary *_languagePack = nil; + +void setLocalizationDelegate(id delegate) +{ + _delegate = delegate; +} + +void setLocalizationLanguagePack(NSDictionary *pack) +{ + _languagePack = pack; +} + +@implementation RCTLocalizationProvider + ++ (NSString *)RCTLocalizedString:(NSString *)oldString withDescription:(NSString *)description +{ + if (_delegate != nil) { + return [_delegate localizedString:oldString withDescription:description]; + } + + if (_languagePack != nil) { + return _languagePack[oldString]; + } + + return oldString; +} + +@end