在XCode中将NSStrings解析为.m文件

时间:2011-01-04 22:09:06

标签: ruby perl xcode nsstring

我想在我的XCode项目中从给定的.m文件中删除所有NSStrings,因此我可以更轻松地将它们本地化。

那些可以提供帮助的正规英雄大师?我想也许Perl或Ruby可能是个好地方吗?

NSStrings在代码中看起来像这样:

NSString * myStringWhichShouldHaveBeenLocalizedToBeginWith = @"foo";

但我真正想要的部分只是 @“foo”

3 个答案:

答案 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的字符串,但它可能足够接近您。