博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
NSLocalizedString用法
阅读量:4673 次
发布时间:2019-06-09

本文共 2197 字,大约阅读时间需要 7 分钟。

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 获得设备支持的所有语言,

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。

转载于:https://www.cnblogs.com/YH-Coding/p/NSLocalizedString.html

你可能感兴趣的文章
[测试题]等效集合
查看>>
[Luogu 1730]最小密度路径
查看>>
[HTML/HTML5]5 使用链接
查看>>
一些SQL语句统计
查看>>
自动生成工具
查看>>
《中国企业报》:SNS网站稳步发展进军海外
查看>>
老实说,WPF对自由开发者与小微型团体来说就是个毒瘤!
查看>>
查看Linux连接数
查看>>
Android国际化-补充
查看>>
像电脑屏保一样的气泡碰撞效果
查看>>
python下使用epoll
查看>>
为什么要简化代码书写
查看>>
java大批量数据导入(MySQL)
查看>>
【D3】D3词汇表
查看>>
P1852 [国家集训队]跳跳棋
查看>>
初识指针
查看>>
mysql5.7安装
查看>>
mysql索引总结----mysql 索引类型以及创建
查看>>
linux环境变量设置和修改
查看>>
[Android]Notification汇总
查看>>