我(和其他所有人一样)使用NSLocalizedString
来本地化我的应用程序。
不幸的是,有几个“缺点”(不一定是NSLocalizedString
本身的问题),包括:
- Xcode中没有字符串自动完成。这不仅让工作容易出错,还很繁琐。
- 您可能会重新定义一个字符串,只是因为您不知道已经存在相应的字符串(例如,“请输入密码”与“先输入密码”)
- 类似于自动完成问题,您需要“记住”/复制粘贴注释字符串,否则
genstring
将会在一个字符串上有多个注释。 - 如果您想在本地化一些字符串之后使用
genstring
,则必须小心,以免丢失旧的本地化。 - 相同的字符串分散在整个项目中。例如,您在各处都使用了
NSLocalizedString(@“Abort”,@“取消操作”)
,然后代码审查要求您将该字符串重命名为NSLocalizedString(@“Cancel”,@“取消操作”)
以使代码更一致。
我所做的事情(经过对stackoverflow的一些搜索,我发现许多人都这样做)是拥有一个单独的strings.h
文件,在那里我#define
了所有的本地化代码。例如:
// In strings.h
#define NSLS_COMMON_CANCEL NSLocalizedString(@"Cancel", nil)
// Somewhere else
NSLog(@"%@", NSLS_COMMON_CANCEL);
这实际上提供了代码补全的功能,一个单一的地方来更改变量名(因此不再需要使用genstring),并提供了一个独特的关键字来自动重构。然而,这样做的代价是最终会得到许多本质上不结构化(例如像LocString.Common.Cancel)的#define
语句。
因此,虽然这个方法有些可以,但我想知道你们在项目中是如何做的。是否有其他方法来简化NSLocalizedString的使用?甚至可能有一个封装它的框架吗?