我一直在尝试开发一些工具来帮助我们的bigass代码库中的字符串提取.目前,我所拥有的只是一个相对简单的Perl脚本,用于解析源代码查找字符串文字,向用户提示某些上下文以及字符串是否应标记为翻译,如果是,则标记它.
对于我需要标记的字符串而言,我可以忽略的字符串太多了.源中的许多字符串不是面向用户的,例如散列键或类型比较
if (ref($db_obj) eq 'A::Type::Of::Db::Module')
我对每个提议的字符串应用了一些启发式方法,看看我是否可以忽略它(例如,我忽略用于哈希查找的字符串,因为我们的代码库中99%的时间都不是面向用户的).然而,尽管如此,我的程序向我显示的大约90%的字符串是我不关心的.
有没有更好的方法可以帮助自动化我的字符串提取任务(即比从源中获取每个字符串文字更聪明的东西)?是否有任何可以处理Perl和Mason源的商业程序?
另外,我对一个优秀的工具有一个(相当愚蠢的)想法,我的工作流程如下.是否值得努力实现这样的事情(可能会非常快速地处理80%的工作),或者我应该提交一个艰苦,恼人的手动字符串提取过程?
>首先从源中提取每个字符串文字,然后将其放入Gettext PO文件中.
>然后,编写一个Mason插件来解析应用程序所服务的每个页面的HTML,目的是记录用户正在看到的字符串.
>使用应用程序中的地狱并尝试覆盖所有用例,构建面向用户的字符串存储.
>给定用户看到的这个字符串存储,对目录文件中的字符串进行模糊匹配,并跟踪与UI匹配的目录条目.
>最后,目录文件中未匹配的任何内容都可能不是面向用户的,因此请从目录中删除它们.
您可以使用PPI智能地进行字符串提取.
#!/usr/bin/env perluse strict;use warnings;use Carp;use PPI;my $doc = PPI::document->new(shift);# See PPI::Node for docs on findmy $strings = $doc->find(sub { my($top,$element) = @_; print ref $element,"\n"; # Look for any quoted string or here doc. # Does not pick up unquoted hash keys. return $element->isa("PPI::Token::Quote") || $element->isa("PPI::Token::HereDoc");});# display the content and location.for my $string (@$strings) { my($line,$row,$col) = @{ $string->location }; print "Found string at line $line starting at character $col.\n"; printf "String content: '%s'\n",string_content($string);}# *sigh* PPI::Token::HereDoc doesn't have a string methodsub string_content { my $string = shift; return $string->isa("PPI::Token::Quote") ? $string->string : $string->isa("PPI::Token::HereDoc") ? $string->heredoc : croak "$string is neither a here-doc nor a quote";}
您可以对字符串周围的标记进行更复杂的检查,以确定它是否具有重要意义.有关详细信息,请参见PPI::Element和PPI::Node.或者,您可以检查字符串的内容以确定它是否重要.
我不能走多远,因为“重要”取决于你.
总结以上是内存溢出为你收集整理的为Perl / Mason i18n进行字符串提取的自动化方法?全部内容,希望文章能够帮你解决为Perl / Mason i18n进行字符串提取的自动化方法?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)