私はreactnativeでアラビア語のアプリを開発しています。ネイティブベースのタブとメニューを使用しました。単語が1つしかないため、正しく配置しました。しかし今、私は右から左に整列した文章を書かなければなりません。特定のテキストにRTL形式を設定する方法はありますか?I18nManager.forceRTL(true);
を設定すると、アプリ全体でRTL形式が変更され、以前の作業がすべて台無しになり、タブが正しく機能しなくなります。助けてください 。
React Native
バージョンは現在0.57
であり、RTL
サポートのreactNative構成はまだありません。
しかし、そのためのネイティブソリューションがあります。 IOSおよびAndroid以下の構成を使用:
IOS:
プロジェクトパスでAppDeligete.m
ファイルを検索し、React
からRCTI18nUtil
ライブラリをインポートして、RTL構成をdidFinishLaunchingWithOptions
クラス内に配置します。私の設定を入れた後、あなたは以下のコードを持っているでしょう:
/* AppDeligete.m */
#import <React/RCTI18nUtil.h> //<== AmerllicA config
#import "AppDelegate.h"
#import <React/RCTBundleURLProvider.h>
#import <React/RCTRootView.h>
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[[RCTI18nUtil sharedInstance] allowRTL:YES]; //<== AmerllicA config
[[RCTI18nUtil sharedInstance] forceRTL:YES]; //<== AmerllicA config
NSURL *jsCodeLocation;
jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil];
RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation
moduleName:@"rntest"
initialProperties:nil
launchOptions:launchOptions];
rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1];
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
UIViewController *rootViewController = [UIViewController new];
rootViewController.view = rootView;
self.window.rootViewController = rootViewController;
[self.window makeKeyAndVisible];
return YES;
}
@end
Android:
プロジェクトパスでMainApplication.Java
ファイルを検索し、I18nUtil
からcom.facebook.react.modules.i18nmanager
クラスをインポートし、MainApplication
関数の後のonCreate
内にRTL構成を配置します。私の設定を入れた後、あなたは以下のコードを持っているでしょう:
/* MainAppliaction.Java */
package com.rntest;
import Android.app.Application;
import com.facebook.react.ReactApplication;
import com.oblador.vectoricons.VectorIconsPackage;
import com.facebook.react.ReactNativeHost;
import com.facebook.react.ReactPackage;
import com.facebook.react.Shell.MainReactPackage;
import com.facebook.soloader.SoLoader;
import Java.util.Arrays;
import Java.util.List;
import com.facebook.react.modules.i18nmanager.I18nUtil; //<== AmerllicA config
public class MainApplication extends Application implements ReactApplication {
private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {
@Override
public boolean getUseDeveloperSupport() {
return BuildConfig.DEBUG;
}
@Override
protected List<ReactPackage> getPackages() {
return Arrays.<ReactPackage>asList(
new MainReactPackage(),
new VectorIconsPackage()
);
}
@Override
protected String getJSMainModuleName() {
return "index";
}
};
@Override
public ReactNativeHost getReactNativeHost() {
return mReactNativeHost;
}
@Override
public void onCreate() {
super.onCreate();
I18nUtil sharedI18nUtilInstance = I18nUtil.getInstance(); //<== AmerllicA config
sharedI18nUtilInstance.forceRTL(this, true); //<== AmerllicA config
sharedI18nUtilInstance.allowRTL(this, true); //<== AmerllicA config
SoLoader.init(this, /* native exopackage */ false);
}
}
次に、ReactNativeスタックを再実行します。これらの構成では、開発プロセスを再開する必要があります。再起動後、プロジェクトはRTLの準備が整いました。私のプロジェクトでは、すべてのFlexBox
の動作がright to left
に変更されます。私はそれを繰り返します、すべての行動。
[〜#〜] note [〜#〜]:Androidでは、すべてのreact native
コンポーネントがRTL
方向ですが、[〜#〜] ios [〜#〜]react native
Text
コンポーネントの右から左の方向には、writingDirection: 'rtl'
スタイルコードを使用します。
[〜#〜]注意[〜#〜]:textAlign: 'right/left/center'
の使用は別の概念ですRTL/LTR
方向。