zoukankan      html  css  js  c++  java
  • iPhone 的国际化

    在iPhone项目中如何才能国际化?难道同一个项目,非要写一个英文版的源代码,再写一个中文版的源代码?

    其实大可不必。我们可以使用iPhone的多语言支持来实现项目的本地(国际)化。

    1、新建Windows-base Application。打开main.m文件,在main函数中增加代码如下:

    // 取得用户默认信息

    NSUserDefaults *defaults = [ NSUserDefaults standardUserDefaults ];

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

    NSArray *languages = [defaults objectForKey : @"AppleLanguages" ];

    NSLog ( @"%@" , languages);

       

    运行程序,从 console 中输出如下内容:

    "zh-Hans",

        en,

        fr,

        de,

    "zh-Hant",

    ……

    可以看到, iPhone 设备上支持的所有语言,有英、法、德,还有两个 ”zh” 开头的语言(简体/繁体)。我们知道,以 ”zh” 开头的就是中文。

    2 、在 Resources 上右键, Add à New File ,文件类型选择 Resource->Strings File ,文件名为 Localizable.strings 。在该文件上使用 getInfo 命令,在如下界面中点击 Make File Localizable 按钮:

    然后 , 你去 Finder 中查看工程目录,会发现多了一个 English.lproj 的目录,其下有一个 Localizable.strings 文件(不过其中的内容是空的)。

    再次打开 getInfo 窗口,显示如下界面:

     

    可以看见 Localizations 列表中只有一个语言 English ,我们需要点击 Add Localization 按钮,增加中文 zh_CN

     

    这时,你再去 Finder 中查看工程目录,发现又多了一个 zh_CN.lproj 的目录,其下也有一个 Localizable.strings 文件(内容也是空的)。

    同时,在 Target 下的 Copy Bundle Resources 目录下多出两个不同语言版本的 Localizabel.strings 文件(一个 English ,一个 zh_CN ):

     

    3 、打开 MainWindow.xib ,拖一个 UILable window 中。

    4 、打开 AppDelegate.h 文件,在其中申明 UILable 变量并增加一个 IBOutlet

    UILabel * label ;

    ……

    @property ( nonatomic , retain ) IBOutlet UILabel* label;

    5 、打开 AppDelegate.m 文件,

    @synthesize window,label;

    ( BOOL )applicationv:application didFinishLaunchingWithOptionsv: 方法中增加代码:

    // 使用NSLocalizedString函数根据iPhone的多语言设置获取国际化的字符串

    label . text = NSLocalizedString ( @"Localizable Test" , @"" );

    6 、回到 IB ,将 UILable 控件和 IBOutlet 变量 label 进行连接:

     

    7 、打开终端程序,进入工程目录,运行命令:

    genstrings -o English.lproj ./classes/*.m

    你会发现 English.lproj 目录下的那个 Localizable.strings 文件中增加了一行代码:

    "Localizable Test" = "Localizable Test" ;

    再运行命令:

    genstrings -o zh_CN.lproj ./classes/*.m

    同样 , zh_CN.lproj 目录下的那个 Localizable.strings 文件中也会增加一行代码:

    "Localizable Test" = "Localizable Test" ;

    打开 zh_CN.lproj 目录下的 Localizable.strings (双击),修改为

    "Localizable Test" = " 本地化测试 " ;

    这样,每当源代码有改变后,我们都需要用 genstrings 命令重新生成 Localizable.strings 文件。但是,每次重新生成后,原来的编辑(翻译)结果又不见了,我们又必须重头翻译。这是个很大的麻烦,建议以后每次 genstrings 之前把文件进行备份,减少重复工作。

    8 、运行程序,效果如下(如果模拟器的多语言设置为简体中文):

    当你把多语言设置改为 English ,则标签中的文本显示为英文了。

  • 相关阅读:
    Powershell数据处理
    Powershell About Active Directory Group Membership of a domain user
    Powershell About Active Directory Server
    Oracle Schema Objects——Tables——TableStorage
    Oracle Schema Objects——Tables——TableType
    English Grammar
    Oracle Database Documentation
    Oracle Schema Objects——Tables——Oracle Data Types
    Oracle Schema Objects——Tables——Overview of Tables
    What is Grammar?
  • 原文地址:https://www.cnblogs.com/encounter/p/2188509.html
Copyright © 2011-2022 走看看