使用NSLocalizedString的最佳实践

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (20)

使用NSLocalizedString本地化我的应用程序。

不幸的是,有几个“缺点”,包括

  • Xcode中没有字符串的自动完成。这使得工作不仅容易出错,而且令人厌烦。
  • 可能会因为不知道已经存在等效字符串而重新定义字符串。“请输入密码”。“先输入密码”)
  • 类似于自动完成-问题,需要“记住”/复制注释字符串,否则genstring将以一个字符串的多个注释结束。
  • 如果想用genstring在已经本地化了一些字符串之后,必须小心不要丢失旧的本地化。
  • 同样的字符串分散在你的整个项目中。例如,使用了NSLocalizedString(@"Abort", @"Cancel action"),然后代码评审要求将字符串重命名为NSLocalizedString(@"Cancel", @"Cancel action")使代码更加一致。

strings.h把我#define所有的本地化代码。例如

// In strings.h
#define NSLS_COMMON_CANCEL NSLocalizedString(@"Cancel", nil)
// Somewhere else
NSLog(@"%@", NSLS_COMMON_CANCEL);

这实际上提供了代码完成、更改变量名称的单一位置(因此不再需要genstring),以及用于自动重构的唯一关键字。#define没有固有结构的语句(例如LocString.Common.Cancel之类的语句)。

还有其他方法可以简化NSLocalizedString的使用吗?也许甚至有一个框架来封装它?

提问于
用户回答回答于

NSLocalizedString有一些限制,但Cocoa的核心是不合理的,编写自定义代码来处理本地化,这意味着必须使用它。

下面是我的步骤:

更新字符串文件

genstrings覆盖字符串文件,丢弃所有以前的翻译。我写更新_String s.py若要解析旧字符串文件,请运行genstrings并填写空白,这样就不必手动恢复现有的翻译。脚本试图尽可能地匹配现有的字符串文件,以避免在更新它们时有太大的差异。

命名字符串

如果你用NSLocalizedString如广告所示:

NSLocalizedString(@"Cancel or continue?", @"Cancel notice message when a download takes too long to proceed");

可能会在代码的另一部分中定义相同的字符串,这可能与相同的英语术语在不同的上下文中有不同的含义相冲突。这就是为什么我总是使用一个没有意义的带特定模块前缀的全大写字符串,以及非常精确的描述:

NSLocalizedString(@"DOWNLOAD_CANCEL_OR_CONTINUE", @"Cancel notice window title when a download takes too long to proceed");

在不同的地方使用相同的字符串

如果多次使用相同的字符串,则可以像使用宏一样使用宏,也可以将其缓存为视图控制器或数据源中的实例变量。

热门问答

腾讯云GPU服务器不能联外网吗?

小爱同学

腾讯云 · 技术支持 (已认证)

推荐
腾讯云GPU服务器可连外网,GPU 云服务器提供和标准CVM 云服务器一致的方便快捷的管理方式。 图片.png GPU云服务器作为CVM云服务器的一类特殊实例,购买、 操作、维护等方式与CVM云服务器一致 图片.png GPU 云服务器(GPU Cloud Computin...... 展开详请

win服务器怎么给文件夹配置755权限?

推荐
下面以腾讯云win服务器(Windows Server 2016 数据中心版 64位中文版)为文件夹配置755权限为例 1.右击【属性】 图片.png 2 .选择【安全】- 【编辑】 图片.png 3. 可对当前文件进行755权限配置 图片.png 要修改某个文件的权...... 展开详请

腾讯云sdk 兼容JDK6?

推荐

如果你说的是https://cloud.tencent.com/document/sdk/Java的话,jdk最低版本是1.7,不支持1.6

android 离线推送 为什么setOfflinePushListener不回调?

嗨喽你好摩羯座
推荐
您好,使用云通信 IM SDK 的通知栏提醒,建议参考:https://cloud.tencent.com/document/product/269/9234 中的描述来操作,通知栏提醒的内容由类 TIMOfflinePushNotification 来定义,可以通过这个类对外...... 展开详请

为什么cmq的topic配置订阅者为queue,向topic发送消息无法到达queue?

是的, 向topic发送消息应该会立即投递到订阅者。您可以检查您配置的队列名称是否正确且是真实存在的队列。如还不能解决您的问题,您可以点击控制台右上角的“工单”,进行问题进一步的排查,腾讯云会有专业的售后24小时为您服务。

脏字过滤只支持 TIMTextElem 消息,对自定义消息无效,请问有接口可以主动检查吗?

学生路人
推荐
您好,脏字检查的内容包括单聊和群组消息(只检查文本消息 TIMTextElem,不支持对自定义消息 TIMCustomElem 的过滤)、群名片、群组资料(群名称、群简介、群公告)用户资料和好友关系链中 bytes 类型的数据(如昵称、好友备注和好友分组等)。目前没有这样的接口喔...... 展开详请

所属标签

扫码关注云+社区