zoukankan      html  css  js  c++  java
  • IOS中的国际化(一)

    序言:IOS中,如果系统的语言或者地区变化了,我们怎样让App中显示的语言, 日期,数字,货币单位的格式随着变化呢?下面将介绍IOS中简单的国际化的方法:

        

    然后点开StoryBoard,你会发现里面的控件都非常简单。为了国际话,我们需要往项目中再添加一门语言。添加语言的方式是,Project--->Info--->Localizations点击"+"来添加相应语言,这里我们选择Chinese(simplified)简体中文。然后将弹出的对话框中的LaunchScreen.strings和main.storyBoard都勾选了。这样我们的基本工作就完成了,下面正式开始

    1. 创建.strings文件,点击command + N 新建文件,在Resouce中选择Strings File文件,命名为Localizable,这样系统就会在不同语言环境下选择不同的.strings文件进行加载,显示不同的语言。
    2. 点击Localizable.strings文件,点击右侧的Localization按钮,然后选择需要本地化的语言,选择汉语,然后再次点击Localizable.strings,你会发现右侧的Localizattion下面多了几个选择语言的选项,Base,English,Chinese(simplified)选中English,然后就会发现又多了一个.strings文件。
    3. 对不同的.string文件配置不同的Value值,在.string中配置的格式是"KEY" = "VALUE";,  注意最后的分号。我们在localizable.strings(English)中加上
      1 "I write %@ lines every day." = "I write %@ lines every day.";
      2 "Do you like coding ?" = "Do you like coding ?";

      在Localizable.strings(Chinese simplified)中添加

      "I write %@ lines every day." = "我每天写%@行代码。";
      "Do you like coding ?" = "你喜欢编程吗?";
    4. 在ViewController.m中改写相应的加载方法将原来的
      1  _viewControllerNumLabel.text = @"I write 1000000000 lines every day.";
      2     [_viewControllerLikeButotn setTitle:@"Do you like coding ?" forState:UIControlStateNormal];

      替换为:

      1     _viewControllerNumLabel.text = [NSString stringWithFormat:NSLocalizedString(@"I write %@ lines every day.", nil),@1000000000];
      2     [_viewControllerLikeButotn setTitle:NSLocalizedString(@"Do you like coding ?", nil) forState:UIControlStateNormal];

      这时候将系统的语言设置成简体中文,General -> International -> Language -> Chinese,然后再重新运行App,你会发现变其中的一个Label和一个Button上的文字改变了。

    5. 修改不同的图片。这时你会发现,有些时候,我们的图片上会有文字,这些文字是不能用代码改变的,所以这时要加载不同的图片,利用步骤4中的方法,我们给图片名用一个Key来表示,然后将不同的图片名作为value写在不同的.strings文件中,我们在English中加入:
      1 "imageName" = "english";

      我们在Chinese中加入:

      1 "imageName" = "chinese";

      其中english和chinese都是图片的文字,然后在ViewControlelr中添加如下代码

      1     _viewControllerImageView.image = [UIImage imageNamed:NSLocalizedString(@"imageName",nil)];

      这时,修改相应的语言就将会出现不同的图片。

    6. 修改没有被引出的控件的显示。点击Main.StoryBoard,你会发现下面有一个Main.strings(Chinese Simplified)文件,这时将里面有关Lable的代码:
      1 /* Class = "UILabel"; text = "Hello I am a Lable"; ObjectID = "zki-n6-dit"; */
      2 "zki-n6-dit.text" = "Hello I am a Lable";

      修改为:

      /* Class = "UILabel"; text = "Hello I am a Lable"; ObjectID = "zki-n6-dit"; */
      "zki-n6-dit.text" = "您好,我是一个Label";

      再次运行代码,你会发现这个时候没有用代码修改的Lable显示的内容也变了。

    7. 还有一个细节问题,数字的格式,运行App时候你会发现原来显示的格式是1000000000,但是我国用的数字表示方式应该是1,000,000,000,西班牙用的数字表示方式是:1.000.000.000,这个怎么国际化呢?这个时候需要在ViewController中添加如下代码:
      1     NSNumberFormatter *numberFormatter = [NSNumberFormatter new];
      2     numberFormatter.numberStyle =NSNumberFormatterDecimalStyle;
      3     NSString *numberString = [numberFormatter stringFromNumber:@1000000000];
      4     
      5     _viewControllerNumLabel.text = [NSString stringWithFormat:NSLocalizedString(@"I write %@ lines every day.", nil),numberString];

      这里利用NSNumberFormatter来进行对数字格式的转化,这里需要注意,再运行App的时候需要将相应的地区也设置成相应的  General -> International -> Region Format -> China

    8. 如何让App显示的名字也国际化?这时需要添加一个plist文件InfoPlist.strings,然后将这个文件进行Localizable,在生成的相应的english和chinese中添加需要显示的App的名字,如:在Chinese的文件中添加:"CFBundleDisplayName" = "双语者",重新运行App就会发现App的名字也随着语言的改变也改变了。最后App的国际化结果为:
  • 相关阅读:
    [MFC]CImageList仅显示黑色的问题
    [hessdroid]Android下使用Hessian与Java服务端通讯的传值测试
    [MFC]Sqlite问题小记
    [MFC] FTP 遍历服务器目录文件卡住的问题
    ExtJs 备忘录(9)—— Ext常用属性、方法小结 [系列完]
    [MFC]托盘图标删除后不自动消失的问题
    RIL接听电话没有声音的问题 [ RIL_Answer | RIL_SetAudioDevices ]
    [Qt]Qt Creator汉化方法
    [C++]遍历可变参数 (va_list)
    [杀毒]删除U盘autorun.inf
  • 原文地址:https://www.cnblogs.com/Mike-Fighting/p/5249190.html
Copyright © 2011-2022 走看看