使用NSLocalizedString的最佳方法?

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

我(与其他人一样)使用NSLocalizedString本地化我的应用程序。

不幸的是,有几个“缺点”(不一定是NSLocalizedString本身的错误),包括

  • Xcode中的字符串没有自动完成。这使得工作不仅容易出错,而且令人厌烦。
  • 可能最终会重新定义一个字符串,因为不知道已经存在一个等效字符串(即“请输入密码”与“先输入密码”)
  • 与自动完成问题类似,需要“记住”/复制注释字符串,否则genstring最终会以一个字符串的多个注释结束
  • 如果想在使用genstring某些字符串之后再使用,则必须小心不要丢失旧的本地化版本。
  • 相同的字符串分散在整个项目中。例如,NSLocalizedString(@"Abort", @"Cancel action")在任何地方都使用,然后Code Review会要求重命名字符串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或类似的东西)。

Balthazar00Balthazar00提问于
社会人就是请不要忘记微笑!回答于
已采纳

NSLocalizedString有一些限制,但它对Cocoa来说非常重要,因为编写自定义代码来处理本地化是不合理的,不得不使用它。

更新字符串文件

genstrings覆盖你的字符串文件,丢弃你之前的所有解释。有一个update_strings.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");

龙珠粉丝255学生回答于

扫码关注云+社区