iOS开发 国际化/多语言适配

史上最详细的多语言本地化

iOS中,国际化适配,大概有下面几种情况需要适配。

1,App名称/图标本地化

2,启动页本地化

3,代码中字符串本地化

4,xib/storyboard本地化

5,图片的本地化

这些都比较简单,网上搜一下,有很多可以参考的好文章。接下来,分享一下,在项目中遇到的一些问题。

一,启动页的本地化,

关于启动页的本地化,网上也有很多说法,作者在项目中用的是多storyboard,如图。

在设置中切换系统语言,启动页并不会跟随切换。这是符合Apple人机界面交互准则的。

如果遇到launchStreen.storyboard上,图片不显示的问题,参考一下两种解决办法:

1,把图片放在工程目录下,不要放到Asset里面。

2,改一下图片名字,或者清空Xcode的缓存derivedData数据。

二, 关于一些第三方库的多语言适配

由于一些第三方库没有多语言,所以我们有时候项目中总是用到了这些库,我们需要去调整这些库。

比如app中配置了切换语言的入口,有些第三方库比如MJRefresh的多语言是根据系统语言适配的,当我们app内切换语言的时候,这些库并不会切换语言,所以我们需要做一些处理。

处理这些的大概方法是,重写这些库语言处理的函数,调整为符合我们使用的要求。或者我们可以直接修改这些库的源码。

三,本地化字符串参数顺序的问题

1,单个参数

2,多个参数

为了使多语言中语法通顺,必须要更改占位符对应的参数顺序,请看下面的例子。句子按照中文语法组织,注意en.lproj中的tip_2字段。

我们可以在%和@之间,加上1$,2$来指定参数的顺序。顺序是从1开始的。

中文环境打印

英文环境打印

四,本地化 App Store 信息

https://help.apple.com/app-store-connect/?lang=zh-cn#/deve6f78a8e2

仅当app处于可编辑状态时,才可以管理语言!

仅当app处于可编辑状态时,才可以管理语言!

仅当app处于可编辑状态时,才可以管理语言!

  这些本地化的信息都会在App Store中表现出来。

五,InfoPlist的本地化

 权限提示的本地化是系统根据系统语言设置的,不会随着我们app内部切换语言切换。

一是我们上面所说的App名称和隐私权限描述,都是由系统读取的,系统会根据当前用户的系统语言来进行读取显示,跟系统语言相关。有些App里面有做切换语言功能,需要注意App内切换语言的功能无法应用到我们今天说的App名称和隐私权限描述的多语言显示,因为这个是系统自己读取的,我们无法指定。

注意,层级要正确,如果在Info.plist里面是在最外边可以这么写,但是如果是在一个字典中,那么也需要把字典加进去,保持层级不变,不能只写想修改的那个key值。比如快捷菜单的层级在Info.plist里面是这样,如果想修改「查看密码」这个文字

<key>UIApplicationShortcutItems</key>
    <array>
        <dict>
            <key>UIApplicationShortcutItemIconType</key>
            <string>UIApplicationShortcutIconTypeLove</string>
            <key>UIApplicationShortcutItemTitle</key>
            <string>查看密码</string>
            <key>UIApplicationShortcutItemType</key>
            <string>all</string>
        </dict>
    </array>

那么你在多语言里面就要这么写

 "UIApplicationShortcutItems" = (
    {
        "UIApplicationShortcutItemType" = all;
        "UIApplicationShortcutItemTitle" = "View Password";
        "UIApplicationShortcutItemIconType" = "UIApplicationShortcutIconTypeLove";
    },
 );

六,本地字符串的规范问题。

有些第三方SDK,参考阿里音视频裁剪模块。用中文作为key,这不是一个很好的习惯。

当用中文作为key,在中文环境下 NSLocalizedString去寻找value的时候,如果找不到,会返回自身。虽然这样省去了中文的配置,但不是一个很好的习惯。

我们应该这样写:以 组件_控件_功能 的样式组织key。

最后是可能用到的一些代码,如下:

1,获取系统语言

    NSArray *languages = [NSLocale preferredLanguages];
    NSString *systemlanguage = [languages objectAtIndex:0];

如果系统语言设置为一下几种情况,systemlanguage的对应值

中文简体                zh-Hans-CN      

繁体中文                zh-Hant-CN              

English(US)        en-US

English(UK)        en-GB

2,设置代码中字符串

#define kLocalizationString(key) getLocalizationString(key)

UIKIT_STATIC_INLINE NSString *getLocalizationString(NSString *key) {
    NSString *appLanguage = @"en";
    NSInteger language = [[kUserDefault objectForKey:kLanguageKey] intValue];
    if (Language_en == language) {
        appLanguage = @"en";
    } else if (Language_zhHans == language) {
        appLanguage = @"zh-Hans";
    } else {
        //获取系统语言
        NSArray *languages = [NSLocale preferredLanguages];
        NSString *systemlanguage = [languages objectAtIndex:0];
        if ([systemlanguage containsString:@"en"]) {
            appLanguage = @"en";
        } else if ([systemlanguage containsString:@"zh-Hans"]) {
            appLanguage = @"zh-Hans";
        } else {
            appLanguage = @"en";
        }
    }
    NSString *path = [[NSBundle mainBundle] pathForResource:appLanguage ofType:@"lproj"];
    NSString *realString = [[NSBundle bundleWithPath:path] localizedStringForKey:key value:nil table:@"MainPartLocalize"];
    
    return realString;
}

以上是常规的做法,现在提供一种本地字符串半自动化的方案。

一,批量替换字符串

搜索条件里输入 (@"[^"]*[\u4E00-\u9FA5]+[^"\n]*?")

替换内容里输入NSLocalizedString($0, nil) 

点击点击Replace All,即可完成替换。

替换后的截图

 二,生成多语言文件

首先,我们需要先新建所需语言的文件夹。​​​​​​​

cd 工程目录
mkdir en.lproj
mkdir zh-Hans.lproj

然后,遍历所有.m文件,根据每个文件内的需要国际化的字符串生成key和value。​​​​​​​

find . -name "*.m" | xargs genstrings -o en.lproj
find . -name "*.m" | xargs genstrings -o zh-Hans.lproj

此时,en.lprojzh-Hans.lproj文件夹中就应该有了相应的Localizable.string文件了。

我们把这两个文件夹拖到工程里,然后在相应的Localizable.strings文件中,修改每个key所对应的value值就行了。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
iOS应用和技术开发是指利用苹果公司开发iOS操作系统,为iPhone、iPad、iPod Touch等苹果移动设备开发应用程序的过程。iOS应用和技术开发具有以下特点: 1. 开发语言:Objective-C和Swift是iOS应用开发的主要编程语言。Objective-C是苹果公司推出的一种面向对象的编程语言,它是C语言的一个超集,可以与C语言代码混合编写。Swift是苹果公司于2014年推出的一种全新的编程语言,它具有更简洁、更可读、更安全的特点,逐渐取代了Objective-C。 2. 应用程序设计:iOS应用程序的设计需要遵循苹果公司的Human Interface Guidelines(人机界面指南),包括应用程序的界面设计、交互设计、用户体验等方面。 3. 开发工具:苹果公司提供了Xcode集成开发环境(IDE),它包括代码编辑器、调试工具、界面设计器、模拟器等功能,方便开发者进行应用程序开发、调试和测试。 4. 应用程序发布:苹果公司提供了App Store应用商店,开发者可以通过该平台发布和销售自己的应用程序。在发布应用程序前,需要进行代码签名、应用程序审核等工作。 iOS应用和技术开发的应用范围广泛,包括社交网络、娱乐、教育、金融、医疗等领域。同时,iOS应用和技术开发也具有一些挑战和难点,例如: 1. 多设备适配:由于iOS设备种类繁多,开发者需要考虑不同设备的屏幕尺寸、分辨率、设备能力等因素,进行多设备适配。 2. 数据安全:iOS应用程序需要处理用户的敏感信息,例如个人信息、财务信息等,因此需要进行数据加密和安全传输等措施。 3. 性能优化:iOS应用程序需要保证良好的用户体验和流畅的性能,因此需要进行代码优化、内存管理等方面的工作。 总之,iOS应用和技术开发是一个充满挑战和机遇的领域,需要开发者具备扎实的编程技能、优秀的设计能力以及对用户体验的深刻理解。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值