Skip to content

Commit

Permalink
Build the basic RCTLocalizationProvider
Browse files Browse the repository at this point in the history
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
  • Loading branch information
ZHUANGPP authored and facebook-github-bot committed Aug 6, 2020
1 parent 3f405dc commit 07640dc
Show file tree
Hide file tree
Showing 2 changed files with 76 additions and 0 deletions.
36 changes: 36 additions & 0 deletions React/Fabric/RCTLocalizationProvider.h
Original file line number Diff line number Diff line change
@@ -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 changes: 40 additions & 0 deletions React/Fabric/RCTLocalizationProvider.mm
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit 07640dc

Please sign in to comment.