返回介绍

安装步骤

发布于 2025-04-26 18:09:31 字数 3028 浏览 0 评论 0 收藏

我们将创建一个通用模块来实现语言转换功能。创建步骤如下:

react-native init LocalizationSample
react-native new-library LocalizationHelper

请阅读第 7 章的相关内容,需要学会配置文件,将原生的库链接到项目中。

LocalizationHelper.h 和 LocalizationHelper.m 文件的内容如下:

LocalizationHelper.h



#import "RCTBridgeModule.h"
#import <Foundation/Foundation.h>
#import "RCTBridgeModule.h"
#import "RCTLog.h"

@interface LocalizationHelper : NSObject <RCTBridgeModule>

@end

LocalizationHelper.m



#import "LocalizationHelper.h"
@interface LocalizationHelper()
-(NSString *)getCurrentLanguage;
@end

@implementation LocalizationHelper

RCT_EXPORT_MODULE()

-(NSString *)getCurrentLanguage{
    return [[NSLocale preferredLanguages] objectAtIndex:0];
}

RCT_EXPORT_METHOD(getLanguage:(RCTResponseSenderBlock)callback){
    NSString * language = [self getCurrentLanguage];
    NSLog(@"Language: %@", language);
    callback(@[[NSNull null], language]);
}

- (NSDictionary *)constantsToExport
{
    return @{ @"language": [self getCurrentLanguage]};
}
@end

代码很容易理解。

现在需要在根目录下创建一个 LocalizedStrings.js 的文件,内容如下:

'use strict';

var localization = require('NativeModules').LocalizationHelper;
var interfaceLanguage = localization.language;

class LocalizedStrings{
    _getBestMatchingLanguage(language, props){
        // props[language] 存在则返回


        if (props[language]) return language;
        // 返回默认语言


        return Object.keys(props)[0];
    }

    constructor(props) {
        // 缓存传入的字符串


        this.props = props;
        // 设置语言默认值


        this.setLanguage(interfaceLanguage);
    }

    // 可以在

 class 外部使用,来强制指定一种语言


    // 与默认的语言独立互不影响


    setLanguage(language){
        // 检查是否有符合当前语言的转换字符集


        // 如果没有使用默认语言


        var bestLanguage = this._getBestMatchingLanguage(language,
            this.props);
        this.language = bestLanguage;
    // 将获取的语言对象关联到

 this 中的

 language 属性上


    if (this.props[bestLanguage]){
    //console.log("There are strings for the language:"+
        language);
        var localizedStrings = this.props[this.language];
        for (var key in localizedStrings){
            //console.log("Checking property:"+key);
            if (localizedStrings.hasOwnProperty(key)) {
                //console.log("Associating property:"+key);
                this[key] = localizedStrings[key];
            }
        }
    }
}

// 获取当前使用的语言


getLanguage(){
    return this.language;
}

// 获取接口中的语言(有可能与当前使用的语言不同)


getInterfaceLanguage(){
    return interfaceLanguage;
}

// 下面这个方法也可以获取接口中的语言


// 但是现在基本没用了,因为

 ReactLocalization 类中已经暴露了这个字段,


// 可以直接获取了


// 在这里放置这段注释的代码只是为了举例说明而已


/*
_getLanguage(){
    var deferred = Q.defer();
    localization.getLanguage((error, deviceLanguage)=>{
        var language = deviceLanguage;
        console.log("Language in js:"+language);
            deferred.resolve(language);
        });
        return deferred.promise;
    }
    */
}
module.exports = LocalizedStrings;

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。