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
This commit is contained in:
Jiayan Zhuang
2020-08-06 14:33:18 -07:00
committed by Facebook GitHub Bot
parent 3f405dcbd2
commit 07640dce69
2 changed files with 76 additions and 0 deletions
+36
View File
@@ -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 <React/RCTDefines.h>
#import <UIKit/UIKit.h>
@protocol RCTLocalizationProtocol <NSObject>
/*
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<RCTLocalizationProtocol> 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<NSString *, NSString *> *pack);
@interface RCTLocalizationProvider : NSObject
+ (NSString *)RCTLocalizedString:(NSString *)oldString withDescription:(NSString *)description;
@end
+40
View File
@@ -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 <Foundation/Foundation.h>
static id<RCTLocalizationProtocol> _delegate = nil;
static NSDictionary<NSString *, NSString *> *_languagePack = nil;
void setLocalizationDelegate(id<RCTLocalizationProtocol> delegate)
{
_delegate = delegate;
}
void setLocalizationLanguagePack(NSDictionary<NSString *, NSString *> *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