我认为这可能是genstrings
错误或"功能"但是想知道是否有人遇到过此问题或知道答案。我打算为此开一个雷达。
我们使用自己的本地化宏。我们称之为CustomLocalizedString
。在我们的代码库中,它非常大,我们使用了很多第三方库。对于绝大多数第三方库而言,如果碰巧拥有它们,我们就不会想要任何本地化字符串。当我们想要使用他们的本地化字符串时,我们修改第三方库以使用我们的CustomLocalizedString
宏。由于我们不关心的字符串使用的是NSLocalizedString*
宏,因此我认为这不是问题。
本地化基本上开始标记一些有问题的字符串。经过一番研究,我意识到它来自第三方lib。然后我进一步意识到我们还包括其他不应该存在的字符串(我们有大量的字符串)。这些是使用NSLocalizedString*
marco的字符串。
因此我们对genstrings
的调用类似于:
genstrings -o output -s CustomLocalizedString
我实际上使用xargs
和find
来创建文件参数,因此为了简洁起见,我省略了该部分。根据输出,genstrings
似乎将NSLocalizedString
和CustomLocalizedString
字符串放入Localizable.strings文件中。
为了进一步验证我使用以下方法创建了一个文件:
NSLocalizedString(@"Normal localized string macro", nil);
CustomLocalizedString(@"Custom localized string macro", nil);
跑了:
genstrings -o out -s CustomLocalizedString localized_string.txt
输出结果为:
/* No comment provided by engineer. */
"Custom localized string macro" = "Custom localized string macro";
/* No comment provided by engineer. */
"Normal localized string macro" = "Normal localized string macro";
运行man genstrings
会产生这样的结果:
-s routine
Substitutes routine for NSLocalizedString. For example, -s MyLocalString will catch calls to MyLocalString and MyLocalStringFromTable.
这听起来像NSLocalizedString*
宏会被忽略,但事实并非如此。
注意我已经重写了find
,只能包含我们想要本地化的第三方库。我们的第三方库基本上都在一个目录中。由于团队中有很多开发人员,我宁愿尝试找到我是否缺少一个标志或其他东西,这样我就可以包含第三方lib目录并让它正确使用CustomLocalizedString
宏。否则,我可以预见有人没有意识到我们的运行情况genstrings
,我们突然发现我们需要本地化的字符串太晚了,因为它们没有被添加到我们的genstrings
find
列表中。< / p>