2018-04-03 00:06:26 CC1991_ 阅读数 3663

       在iOS开发过程中难免会遇到App要设置别的国家的语言,这就设计到国际化配置,那么本篇博文就来讲讲App怎么快速进行国际化配置。App语言国际化,也叫语言本地化,根据用户使用的操作系统的语言设置,自动将App的语言设置成和用户使用的操作系统的语言一致的语言。

一、配置需要国际化的语言

首先,根据具体需求来配置需要使用到的国际化的语言,国际语言种类很多,没有必要全部都加上,根据实际需求选择性添加几种需要用到的语言即可。不管我们是国际化App的名称、界面中的字符串文字信息,还是图片、图标,都需要先进行配置准备工作,具体步骤如下所示:

1、打开项目工程,找到选中PROJECT-->Info-->Localizations,然后点击“+”,然后添加需要国际化/本地化的语言,(默认需要勾选下面的“Use Base Internationalization”);


2、这里以添加德语为例,点击加好之后,找到德语选项,然后弹出一个对话框,直接点击“Finish”即可,同理,其他需要添加的语言也是按照这种操作步骤进行;




3、之前的旧版本xcode在设置本地化App名称的时候,还需要在Info.plist文件中添加一个名为“Application has localized display name”的BOOL类型的Key,还需要把它的值设置为YES,之所以这样做就是为了让App支持本地化App名称,但是现在可以忽略这一步,具体设置如下所示(只给有需要的人看):



二、App名称的国际化/本地化设置

1、选中Info.plist,然后使用快捷键command + n,新建文件,然后选择Strings File类型的文件(iOS-->Resource-->Strings File);

2、文件名字必须要命名为首字母大写的“InfoPlist”,就算是首字母小写也不行,如果不按照这个名字来,你绝对设置不成功的!然后文件名后面在创建成功之后会自动生成后缀,这里不用担心,只要把文件名字写对就行了;

3、点击create之后,xcode左侧导航列表里就会新出现一个名为InfoPlist.strings的文件,然后选中这个文件名,在xcode的File inspection点击Localize,这样做是为了选择需要的本地化语言;

4、点击Localize之后,会弹出一个提示对话框,展开对话框列表,发现下拉列表所展示的所有语言就是我们需要国际化的语言,选择需要本地化的语言,然后点击对话框的Localize按钮,然后依次把需要的语言都按照这种方法选中添加即可;

5、然后在添加完的国际化语言列表里面全部勾选刚才添加的国际化语言列表,然后再回去Xcode左侧的InfoPlist.strings的文件下面多了子文件,然后点击箭头展开,会发现添加的几个国际化语言文件;

6、然后在InfoPlist.strings下面所有的国际化语言文件里面分别添加对应的App名字,比如英语类型里面,就写:CFBundleDisplayName = "English"; //English就是App英文的名字;

7、依次在剩下的几种语言里面分别添加对应的App本地化名字即可。具体图解步骤如下所示:









三、项目详情中字符串的本地化处理

       字符串本地化处理,就是App里面的字符串在不同的语言下显示对应语言的内容,eg:"我的"这个词语在简体中文语言环境下就显示“我的”,在英语环境下就显示“Me"。其实字符串本地化和App名称本地化的过程一模一样,只不过创建的文件名字不一样罢了,这里的字符串本地化创建的文件名字必须是:Localizable,错一个字母都不行,首字母小写也不行,不然就不会成功本地化处理。

1、与App名称本地化创建文件的步骤一样,使用快捷键command + n,新建文件,然后选择Strings File类型的文件(iOS-->Resource-->Strings File);

2、文件名必须命名为Localizable,文件创建成功之后,查看xcode左侧多出来一个名为Localizable.strings的文件,然后选中该文件,在xcode的File inspection点击Localize;

3、点击Localize之后,会弹出一个提示对话框,展开对话框列表,发现下拉列表所展示的所有语言就是我们需要国际化的语言,选择需要本地化的语言,然后点击对话框的Localize按钮,然后依次把需要的语言都按照这种方法选中添加即可;

4、然后在添加完的国际化语言列表里面全部勾选刚才添加的国际化语言列表,然后再回去Xcode左侧的Localizable.strings的文件下面多了子文件,然后点击箭头展开,会发现添加的几个国际化语言文件;

5、然后在Localizable.strings下面所有的国际化语言文件里面,分别以键值对的形式在代码中给每一个需要本地化的字符串赋值,比如英语里面:"home" = "Home",那么简体中文里面:"home" = "主页" ,依次在每个对应的语言文件里面添加该键值对对应的值;

6、为了方便起见,直接使用Foundation框架系统自带的宏来根据Key获取对应的字符串,然后赋值给代码中字符串,这个宏是:#define NSLocalizedString(key, comment) [[NSBundle mainBundle] localizedStringForKey:(key) value:@"" table:nil]

7、具体在代码里调用:

NSString *cart = NSLocalizedString(@"cart", nil);

self.title = cart;

这里就不再发全部截图,以上步骤截图可以参照App名字本地化的那些步骤来就行,下面只发一下不一样部分的截图:




四、图片设置本地化配置

      图片设置本地化和Localizable.strings类似,图片资源存放在Images.xcassets里,使用时将不同语言的图片资源在Localizable.strings里一一对应设置,如下所示:

Localizable.strings (English)
"imageName" = "pic-e";

Localizable.strings (Chinese(Simplified))
"imageName" = "pic-c"; 

五、货币值设置本地化配置

      货币显示在不同的国家是有区别的,例如:100000可以写作"100,000"也能写作"100.000"。针对这种情况可以使用NSNumberFormatter格式化,例如:


NSNumberFormatter *numberFor = [[NSNumberFormatter alloc] init];

[numberFor setNumberStyle:NSNumberFormatterDecimalStyle];


NSString *numberString = [numberFor stringFromNumber:@(100000)];

testLabel.text = [NSString stringWithFormat:NSLocalizedString(@"testNum:%@", nil), numberString];



六、Xcode 8 权限提示语国际化/本地化配置

       配置权限国际化和配置应用程序名字国际化一样,具体Key值如下:

NSMicrophoneUsageDescription                  麦克风权限

NSCameraUsageDescription                         相机权限

NSPhotoLibraryUsageDescription                  相册权限

NSBluetoothPeripheralUsageDescription       蓝牙权限

NSSpeechRecognitionUsageDescription      语音转文字权限

NSCalendarsUsageDescription                      日历权限

NSLocationWhenInUseUsageDescription      定位权限

NSLocationAlwaysUsageDescription            定位权限


以上就是本篇全部内容,欢迎关注三掌柜微信公众号,欢迎关注!





2014-07-09 15:56:28 u010257677 阅读数 351

一,应用名称国际化:

在工程中添加文件,并命名为InfoPlist.string。将这个文件Localization。在工程设置中,添加语言,会生成该语言对应的Infoplist文件,在这个文件中:

CFBundleDisplayName ="应用";这句话就是将APP的名字的中文名命名为“应用”了。


二,应用中的内容的国际化

将界面文件做Localization,然后添加多语言,会生成多语言对应多布局文件,然后在界面文件中把需要显示为其他语言的部分写好就可以了。

如果在项目设置界面添加语言时,能够把界面文件自动生成,那么这个时候生成的界面文件不再是.xib文件,而是.string文件。


三,在设置中添加属于应用的多语言。

使用命令行,在Setting bundle中复制en.lproj文件夹,并更名为对应的语言包的名称,比如日语就是ja.lproj。该文件夹下有一个文件Root.string,在这个文件中将对应的名称翻译成对应的语言就可以了。

2015-11-12 14:05:44 TF_Man 阅读数 2472

    国际化,顾名思义就是让各国人使用你的app,能显示本国的语言。国际化,没有想象中那么难,只知道通NSLocalizedString方法将相应语言的字符串加载进来即可。


本篇来自:http://blog.csdn.net/VictorMoKai/article/details/48894873

                  http://blog.sina.com.cn/s/blog_7b9d64af0101jncz.html


  开发环境 :Xcode 5以上 & Object C

   一、 iOS国际化原理分析

           国际化其实都大同小异,其核心思想就是为每种语言单独定义一份资源

           iOS就是通过xxx.lproj目录来定义每个语言的资源,这里的资源可以是图片,文本,Storyboard,Xib等。我们可以看看              LocalDemo源代码的物理目录结构


每种语言都有自己的 语言代码.lproj文件夹,加载资源时只需要加载相应语言文件夹下的资源就OK,这步可以系统为我们完成(图一),也可以手动去做(图二)。

  图一:



   图二:



 

 二 、国际化开始步骤

       1. 首先点击项目->PROJECT->Info->Localizations中添加要支持的语言



注:此处Use Base Internationalization开启状态下,每个国际化资源文件会有个Base选项,主要针对String,Storyboard,Xib作为   一个基础的模板,像后述storyboard国际化中方案二就是基于Base StoryBoard进行改动。

        在点击+添加相应语言时会弹出以下对话框,意思是为现有的资源添加语言文件,我们点击Finish就行了



        2. 然后创建国际化语言文件(Xcode 5以下自动会生成)文件名必须为:Localizable.strings



          选中Localizable.strings文件,在Utilites中,点击Localizable选项



           创建English语言包。



创建后,你的Localizable.strings文件下将挂在英文的语言支持文件。


       三、文本的国际化

             文本的国际化是通过一个Localizable.strings文件来存储每个语言的文本,它是iOS默认加载的文件。

            每个资源文件如果想为一种语言添加支持,通过其属性面板中的Localization添加相应语言就行了,此时Localizable.strings

   于可展开状态,子级有着相应语言的副本。我们把相应语言的文本放在副本里面就行了



注:此处Base与前面提过到的开启Use BaseInternationalization是有关联的,只有开启了全局Use Base Internationalization此处才会显示。那为什么这里没有勾选Base?Base做为一个基础模板,作用于Strings文件是没有太大意义的,另外去掉Base意义着在Base.lproj中少了一个strings文件,APP大小也所有下降,这点对于图片的Base更是如此。


        代码中这样写就行了


另外中文strings【Localizable.strings(Simplified)】可以不要的(可以理解为中文为APP的默认语言),因为key就是value,当找不到相应的语言strings或value时会直接返回key。nice!这样一来我们做文本的国际化就只要维护一个英文副本strings就O了

 

         四、图片的国际化

               图片的国际化可以通过原生支持与自定义命名



同上,Base副本去掉。另外需要注意的是,使用这种方式,在XIB或Storyboard中引用图片时如果只使用名称是实时显示不了的,一定要加上后缀名。如avater.png


       代码中使用方式不变,iOS会自动找相应语言(xxx.lproj)下的图片


对于图片的放置,正确姿态应该是需要国际化的图片放在自定义Group里面,不需要国际化的图片放在Images.xcassets

 

        五、获得当前设备的语言

            你可以在AppDelegate的didFinishLaunchingWithOptions方法中获取当前的语言。

    //取得用户默认信息

    NSUserDefaults *defaults = [NSUserDefaultsstandardUserDefaults ];

    // 取得 iPhone 支持的所有语言设置

    NSArray *languages = [defaultsobjectForKey :@"AppleLanguages" ];

    // 获得当前iPhone使用的语言

    NSString* currentLanguage =[languagesobjectAtIndex:0];

    NSLog(@"当前使用的语言:%@",currentLanguage);

注:1.代码有冲突,建议使用(图一)设置方式。

       2.切记不要以为改变AppleLanguages值,就改变系统的设置语言,苹果官方API没有提供我们直接修改的AIP.



2015-12-26 10:49:51 boring_cat 阅读数 722
加班途中来发一贴 关于app的国际化步骤操作

(以下不适用于xib,适用于固定文字)
1.新建Source分类里面的String File文件 命名必须是:Localizable.strings
①建文件步骤





②成功后







2. ①来到工程页
 - PROJECT  - Info - Localizations 点击加号 添加你要的语言


②工程页添加完成 来到左边文件栏 选择Localizable.strings 之后在右边栏的选项 点击Localizable按钮添加语言



③成功后 Localizable.strings展开会出现你选择的文字选项








3.新建字符串类别 String+Localizable.h (名字可以随便取)
@interface NSString (Localizble)  类扩展
②实现方法 减方法
-(NSString)L;





实现方法







3. 来到Localizable.strings 
选择你要用的语言 (此处选择繁体) 在里面输入一些你会在app内部使用的字
"订单状态" = "訂單狀態";
"地图定位" = "地圖定位";
"电话联系" = "電話聯繫"






4.然后把头文件 引入到pch里面去 就可以用了
使用方法 字符串.L   例如:  用的时候 :@"订单状态".L




 看到里面的字符串后面的 .L  了吗!!!


5.注意:
①一般只能国际化一些固定的文字,网络获取的数据, 没法国际化,除非自己做一个简繁转换,网络获取的数据,简体就是简体,繁体就是繁体
②如果系统繁体, 那就显示繁体,如果系统不是繁体, 不管是什么都显示中文.系统根据当前语言环境自动做处理

(xib国际化部分  后续更新)
==================2015 12 29================
今天来更新一下xib的国际化部分 
点击xib  来到右边的部分 点击国际化 如图


然后把简体中文改成繁体字就可以了 !  就是这么简单!
2016-03-12 11:21:57 huangtianyouhehuangg 阅读数 476

本文转载自:http://www.cocoachina.com/appstore/20160310/15632.html

前言

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

1.Bundle display name

先看此方法的具体设置步骤:

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

QQ截图20160309174314.png

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

QQ截图20160309174324.png

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

1468630-7d782f2d30827276.png

具体也没太多好说的,检索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,也先看具体步骤:

  • 新建一个Strings File,命名应该不一定非得是InfoPlist.strings,应该是沿用习惯。

54.png

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

QQ截图20160309174007.png

QQ截图20160309174019.png

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

1468630-d4b52eb0f01a6ad1.png

可以选择支持英文

1468630-a885a69c4cf737ca.png

QQ截图20160309173853.png

  • 分别设置中英文名字

"CFBundleDisplayName" = "中文名字";

"CFBundleDisplayName" = "EnglishName";

名字字符串自己填写就好,这里只是示范

QQ截图20160309173740.png

  • 编译工程

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

'.png

3.关于默认语言的设置:Localization native development region

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

4. 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)];

分别设置系统的语言环境至中英文模式,效果如下:

QQ截图20160309173458.png

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

1468630-1b6e905c3d91a528.png

本文只是简单介绍相关的用法,至于详细的说明,可以参考文章最后列出的参考文章,里面有不少不错的详细讲义。

参考文章:

iOS中app国际化的学习记录

博文 来自: woshiwls
没有更多推荐了,返回首页