如果您愿意对某些请求造成轻微的性能影响,您可以在每次调用时检查文件的 md5sum maketext()
。
例如:
package MyMakeText;
use strict;
use warnings;
use Digest::MD5;
my @PO_FILES = ('exaple.po');
my %FILE_TO_DIGEST;
my $LOCALIZER;
sub maketext {
if (files_have_changed() || !$LOCALIZER) {
$LOCALIZER = get_handle();
}
return $LOCALIZER->maketext(@_);
}
sub files_have_changed {
my $files_have_changed = 0;
for my $po_file (@PO_FILES) {
open(my $fh, '<', $po_file) or die $!;
my $md5sum = Digest::MD5->new->addfile($fh)->hexdigest;
close($fh);
if (!exists $FILE_TO_DIGEST{$po_file} || $FILE_TO_DIGEST{$po_file} ne $md5sum) {
$FILE_TO_DIGEST{$po_file} = $md5sum;
$files_have_changed = 1;
}
}
return $files_have_changed;
}
请注意,这部分是伪代码,因为我不知道您当前是如何构造 Locale::MakeText 对象的,所以我留给您填写get_handle()
. 但我认为您可以看到如何包装您的调用以maketext()
包括检查是否有任何文件更改了其内容。
.po
文件通常非常小,最近更改的文件通常会在 Linux 磁盘缓存中,所以我希望这会非常快,尽管所有明显的磁盘读取。