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