我想在我的XCode项目中从给定的.m文件中删除所有NSStrings,因此我可以更轻松地将它们本地化。
那些可以提供帮助的正规英雄大师?我想也许Perl或Ruby可能是个好地方吗?
NSStrings在代码中看起来像这样:
NSString * myStringWhichShouldHaveBeenLocalizedToBeginWith = @"foo";
但我真正想要的部分只是 @“foo”。
答案 0 :(得分:2)
已经有了内置的机制。请参阅Cocoa string resource docs。
genstrings是提取字符串并将其写入.strings文件以进行翻译的工具。 NSLocalizedString宏(以及其他相关的)使得从特定于语言环境的.strings文件中获取本地化字符串变得很容易。 genstrings不提取所有@“”字符串,只提取与NSLocalizedString一起使用的字符串,因为那些字符串应该是本地化的。
答案 1 :(得分:0)
perl -wln -e 'next if /^NSString/; print' whatever.m > nonsstring.m
这将简单地跳过以“NSString”开头的行 - 如果你想要更高级的东西,比如替换有NSStrings的部分行,你将不得不给我们更多的信息。
编辑:好的,根据澄清......
use strict;
use warnings;
use 5.010;
use autodie;
my $file = 'whatever.m';
open my $fh, '<', $file;
while (<$fh>) {
say $+{capture} for /NSString
\s* \* \s*
[^=]+ \s* = \s*
(?<capture>@[^;]+?);
/gx;
}
或者作为一个方便的单行:
perl -wln -E 'print $+{capture} for /NSString\s*\*\s*[^=]+\s*=\s*(?<capture>@[^;]+?);/g' whatever.m
编辑:由于我不知道数据的形式,因此将其更改为在单个记录中处理多个NSStrings。
答案 2 :(得分:0)
试试这个:
perl -nle 'while (/(@".*?")/g) { print "$1\n";}' <source file>
这不能正确处理包含转义引号字符或多行NSString的字符串,但它可能足够接近您。