iOS程序国际化的使用

本文介绍了如何在iOS应用中实现文字、图片和storyboard的国际化,包括为程序添加语言支持,创建Localizable.strings文件,处理图片名称,以及解决国际化过程中遇到的模拟器和真机显示问题。适用于Xcode6.1。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       当我们把程序发布到AppStore这个大平台时,发现不仅仅只有看得懂中文或者英文的用户,当我们需要更多国家的用户能获得更好的用户体验时,我们不得不修改所有需要显示的内容,当我们要适配10个国家的语言,然后在对每个控件赋值前都要加上一大串的switch判断这样实在太low了,而且代码也会变得很庞大。其实苹果已经为我们提供了很简单的方法实现。(本文所用Xcode版本为Xcode6.1)

文字的国际化

       我们先创建一个Xcode工程,命名为InternationalizationDemo。并在ViewController(什么图控制器都可以)界面上通过代码创建一个Lable(本文模拟器为iPhone5s)。
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(20, 50, 300, 40)];
    label.text = @"This is my InternationalizationDemo";
    [self.view addSubview:label];
如果运行后,lable能正常显示,那我们就可以开始国际化了:

1、为程序增加语言类型支持

      找到Project(不是Target)->Info->Localizations,如下图:
                  
             现在Localizations中只有一项English,我们点下面的+号增加要添加的语言支持,这里我选择Chinese(Simplified)简体中文
    (如果要支持其他语言可自信添加),之后弹出选择要适配的文件,这里我们全都勾选上,然后点Finish:
              

2、创建Localizable.strings文件             

      在程序目录下创建Strings文件,命名为Localizable.strings(这里使用系统默认名字,可以自定义命名,但会增加一些配置,后面会讲到),操作如下:
              
        之后选中Localizable.strings,并在右侧属性栏下选择Localized标签,会弹出一个选择框,里面有我们在第一步Language中看到的English和我们自己增加的Chinese,我们在English和Chinese中任选一个:
              
        然后原来的Localize的标签会变成下面这样,我们把English和Chinese前的勾全勾上,这是左边的Localizable.strings下会生成两个对应的文件,分别用于不同语言下的匹配文件。
              
       在English的文件内输入
<span style="font-size:14px;">"labelText" = "This is my InternationalizationDemo!";</span>
       在Simplified的文件内输入
<span style="font-size:14px;">"labelText" = "这是我的国际化栗子!";</span>
       这里的输入格式为:“Key” = “Value”;可增加多行。这是最重要的一步,引号与末尾分号为英文状态下的格式,其次两行代码的左侧引号内为相同的内容(内容可随意)。当系统判断好当前语言环境时,会自动在各自语言对应的文件里查找我们在页面代码中用到的Key(这里的Key为lableText,我们之后会用到),并读出Key所对应的具体内容。

3、国际化的使用

      完成上面的配置后就只差使用了,我们回到ViewController中,修改lable的内容显示:
label.text = NSLocalizedString(@"labelText", nil);
      这里的NSLocalizedString(key,comment)是NSBundle中的一个宏定义,也可以调用原来的方法[[NSBundle mainBundle] localizedStringForKey:(key) value:@"" table:nil]。他们的返回值是NSString类型,内容为Localizable.strings中key对应的value值。也可以在value中添加格式符如:配置“price%i” = “价格为%i”;使用时:
      最后进入模拟器的设置:Settings->General->Language&Region->iPhoneLanguage 选择简体中文,然后运行程序就行了。
      如果不成功请看后面的常见问题
          英文环境下:简体中文环境下:
      在Localizable.strings中使用的key-value中我们可以使用格式符如:
      在English对应的文件中添加“price%i” = “price:%i”,
      在Chinese对应的文件中添加“price%i” = “价格为%i”;使用时:
    label.text = [NSString stringWithFormat:NSLocalizedString(@"price%@", nil), @(888)];

图片的国际化

      通常在软件中,我们很多文字是通过图片的形式展现的,他们国际化的方式和文字的差不多,但是我们无法在Localizable.strings中的value值中保存图片,但我们可以保存图片名字,例如:我们准备两张图片,并拷贝到程序目录下,分别为“chinesetitle.png”,“englishtitle.png”。

      在English对应的文件中添加"titleImg" = "englishtitle.png";
      在Chinese对应的文件中添加"titleImg" = "chinesetitle.png";(注意别漏了分号)
      然后在ViewController中添加一个imageview,如下:

    UIImageView *imgView = [[UIImageView alloc] initWithFrame:CGRectMake(20, 90, 262, 162)];
    imgView.image = [UIImage imageNamed:NSLocalizedString(@"titleImg", nil)];
    [self.view addSubview:imgView];
          英文环境下:简体中文环境下:

storyboard国际化

前面介绍的对文字及图片的国际化都是通过代码实现的,但是有很多开发者喜欢用xib或者storyboard来搭建页面,接下来介绍他们的国际化方法:

      还记得我们在第一步增加语言支持时的操作吗如下图:

             

      我们在Main.storyboard前打上了勾,意思是让storyboard支持该语言,即storyboard可以对这个语言进行单独设计。我们点开storyboard,并在右侧属性栏中的第一页里找到Localization,这里也会有我们所支持的语言,我们全都打上勾后,在左侧的storyboard目录下就会生成各自的文件,之后就可以为每种语言单独搭建页面了,可以使用不同的图片,不同的文字或是不同的布局。

              


常见问题

1、模拟器不上能显示。

      如果真机上能显示,并且Xcode的版本是6(其他版本可以试试这个方法),那么问题在于模拟器,模拟器中的设置并没有起作用,我们需要通过Xcode外部设置模拟器的语言:Xcode->Product->Scheme->Edit Scheme...->Options->Application Language->这里有我们为程序增加的语言支持类型,我们选择需要的,重新运行就可以了。
              

2、真机上不能显示,模拟器上能显示。

      这个问题通常是我们将Localizable.strings文件名中大小写写错,在iOS的模拟器对大小写不敏感,而iOS本身的文件系统式对大小写敏感的,所以在真机上不能显示,而在模拟器上却没有问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值