Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

APP国际化(中英两种语言) #1

Open
runningTeemo opened this issue Aug 15, 2016 · 0 comments
Open

APP国际化(中英两种语言) #1

runningTeemo opened this issue Aug 15, 2016 · 0 comments

Comments

@runningTeemo
Copy link
Owner

原文地址 http://www.jianshu.com/p/a3a70f0398c4
记得建.strings的时候只能有两种命名
InfoPlist.strings和Localizable.strings

iOS 设置APP的名称(浅述APP版本国际化与本地化
前言
App的名字设置方式有很多种,如果在App打包上线时不做修改,最终App的名字就是Xcode在建立工程时的名字。好的习惯是工程建立时使用英文(pinyin),那么App也就是“英文”名字了,虽然Xcode也支持直接用中文命名工程(甚至是方法名……),但有时也会因此产生一些不必要的麻烦甚至莫名其妙的bug。
本文主要介绍两种设置App名称的方法,第一种较为简单,第二种涉及简单的版本国际化与本地化(Localization)的问题。笔者对于两个方法的认知也是较为基础的,如有不妥之处,还望斧正。

1.Bundle display name
先看此方法的具体设置步骤:

1.建立工程如下,如果不设置App名,默认的App名就是工程名了。

2.点击工程-TARGETS-Info,添加“Bundle display name”,string值填写要设置的App名称。

3.再次编译,效果如下,这个方法就是这么简单了。

具体也没太多好说的,检索App名称设置时,大部分答案也是这个,因为比较简单。

这里提一下Bundle name和Bundle display name:

Bundle name - is folder name, where your app (including executable file and all resources) will be stored (Cool Program.app)。建议不要修改bundle name
Bundle display name - is what will be shown on iPhone screen,即当你安装该app到iPhone上显示的name。
注意:Bundle Display name must correspond to Bundle name,即bundle display name和bundle name不能相差太远。例如bundle name设置为 TheApplication, 而 bundle display name设置为“金瓶梅”,则apple会拒绝你的app。
2.InfoPlist.strings->CFBundleDisplayName
这种方法较为繁琐,但是可以支持多语言版本名称的设置,即Localization,也先看具体步骤:

1.新建一个Strings File,命名为InfoPlist.strings(命名必须固定,感谢nyh1006同学纠正)。

2.点击工程-PROJECT-Info-Localizations,添加简体中文支持,如果想支持繁体,也可继续添加,其他语言亦然。

3.点击之前创建的InfoPlist.strings - 点击右边的“Localizion”- 添加简体中文

可以选择支持英文

4.分别设置中英文名字
"CFBundleDisplayName" = "中文名字";
"CFBundleDisplayName" = "EnglishName";
名字字符串自己填写就好,这里只是示范

5.编译工程
分别切换模拟器的设置中的语言至中英文模式,分别查看appiocn下面的名字的变化:

3.关于默认语言的设置:Localization native development region
Xcode建立工程时,默认语言环境是英文,所以在调用一些系统空间时(例如相机相册),其控制按键的标题都是英文显示的状态,快速的设置方法就是设置Localization native development region的值,具体步骤可以参考此文:Localization native development region 更改语言无效 中的第一段内容。

  1. Localizations版本国际化
    这个就是为了让APP支持多国语言环境,最好的Demo应该是环信的官方Demo,这里只是介绍一下简单的用法:

1.同添加InfoPlist.strings的做法相同,添加一个Localizable.strings文件(名字固定)
2.对应中英文(其他语言自行添加),分别添加下列语句:

"alertTitle" = "标题";
"alertMessage" = "信息";
"alertOk" = "确认";
"alertOther" = "其他";

"alertTitle" = "title";
"alertMessage" = "message";
"alertOk" = "confirm";
"alertOther" = "other";
关于上述的key和value,只是示范,可自行定义,调用这些key-value需要利用NSLocalizedString(<#key#>, <#comment#>)系统宏,例如:NSLocalizedString(@"alertTitle", @"这是一句注解,根据情况写"),第一个参数即在strings文件中自定义的key,根据不同的语言环境,系统会自动检测这个key对应的value(中文还是英文),第二个参数是注释,为了便于理解,可以为nil。
实际用例:

  • (void)createAlertViewWithTitle:(NSString *)title message:(NSString *)message delegate:(id)delegate cancel:(NSString *)cancel andOther:(NSString *)other
    {
    UIAlertView * alert = [[UIAlertView alloc] initWithTitle:title message:message delegate:delegate cancelButtonTitle:cancel otherButtonTitles:other, nil];
    [alert show];
    }
    //调用
    [self createAlertViewWithTitle:NSLocalizedString(@"alertTitle", @"这是一句注解,根据情况写") message:NSLocalizedString(@"alertMessage", @"") delegate:nil cancel:NSLocalizedString(@"alertOk", nil) andOther:NSLocalizedString(@"alertOther", nil)];
    分别设置系统的语言环境至中英文模式,效果如下:

上面的写法看起来比习惯上直接写string去设置标题要麻烦许多,但是常用的标题可以进行二次宏定义管理,那样不仅使用方便,还便于统一管理。
看一下环信Demo中的示范:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant