zoukankan      html  css  js  c++  java
  • NSLocalizedString用法

    NSLocalizedString(@"Foo %@",nil);这句话实际上是在多语言文件中寻找一个key为“Foo %@”的文字,千万不要把这个和[NSString stringWithFormat:@"%@",@“hehe”];弄混了。

     

    特别的有一种很特殊的情况,发生在Appirater这个开源工具里面。

    #define APPIRATER_APP_NAME @ "App"

    #define APPIRATER_LOCALIZED_MESSAGE_TITLE   NSLocalizedString(@"Rate %@", nil)

    #define APPIRATER_MESSAGE_TITLE             [NSString stringWithFormat:APPIRATER_LOCALIZED_MESSAGE_TITLE, APPIRATER_APP_NAME]

    乍看上去,以为最终的结果是在多语言文件中找key为“Rate App”的代码,实际上并不是!

    最终APPIRATER_MESSAGE_TITLE的结果是:先在多语言文件中寻找key为“Rate %@”的文字,如果找到,则返回这个文字,忽略stringWithFormat里面那个APPIRATER_APP_NAME,如果找不到,再返回“Rate App”!

    例如:

    NSString *string = APPIRATER_MESSAGE_TITLE; 

    如果能在多语言文字里面找到key为“Rate %@”的文字,string就直接返回这个文字,即返回NSLocalizedString(@"Rate %@", nil)

    如果找不到,则返回 [NSString stringWithFormat:@"Rate %@",APPIRATER_APP_NAME];

     

    NSLocalizedString和设备支持的语言

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];//得到当前用户默认设置

    NSArray *language = [defaults objectForKey@"AppleLauages"];//获得设备支持的所有语言,

    NSString *currentLanguage = [language objectAtIndex:0];//数组第一位的是用户当前使用的语言。

    [defaults setObject:currentLanguage forKey:@"user_lang_string"];//设置用户当前语言为当前系统语言。

     

    NSLocalizedString

    是一个“宏”

    #define NSLocalizedString(key, comment)

            [[NSBundle mainBundle] localizedStringForKey:(key) value:@"" table:nil]

    上边这个是原型。

     

    在一个项目里

    Add一个新的File,类型为StringFlie,步骤Flie->New->File->IOS下边的Resource里边的StringsFile。

    单击新加的StringFile文件(*.strings),在属性中修改他的名字为“Localizable.strings”

    并在Localization下边,点左下的加号,第一次点击会闪一下,然后会出现一个English或者Chinese取决于你当前的语言模式。随便添加一个例如我默认的是English,我添加了一个Chinese,然后右边的StringFile文件(Localizable.strings)下边多出两个文件:

    1、Localizable.strings(English)

    在这个文件中添加内容:

    "Master" = "Master...";

    "Detail" = "Detail...";

     

    2、Localizable.strings(Chinese)

    在这个文件中添加内容:

    "Master" = "主视图";

    "Detail" = "详细视图";

     

     

    这样当你使用NSLocalizedString时,系统会自动在目录下的StringFile文件(Localizable.strings)中找到当前设备所使用的语言,比如说是English的,那么他就会按照"Master" = "Master...";的格式将其他文件中的所有使用NSLocalizedString方法的的"Master"在你运行的时候显示成"Master...".  举个栗子:

    self.title = @"Master";

    那么这个标题在任何语言的系统中都会显示出Master。

    但是你要是使用:

    self.title = NSLocalizedString(@"Master",@"this is Master");

    那么这个标题在英文版本中就会显示:Master...

    中文版本中就会显示:主视图

    (@"Master",@"this is Master");前边那个是Key,对应strings文件中的Key,后边那个this is Master是备注,写不写都行,可以为nil。

  • 相关阅读:
    Generate Parentheses
    Length of Last Word
    Maximum Subarray
    Count and Say
    二分搜索算法
    Search Insert Position
    Implement strStr()
    Remove Element
    Remove Duplicates from Sorted Array
    Remove Nth Node From End of List
  • 原文地址:https://www.cnblogs.com/pocket-mood/p/4463708.html
Copyright © 2011-2022 走看看