Perl 如何在应用程序中动态更改Maketext词典?

Perl 如何在应用程序中动态更改Maketext词典?,perl,internationalization,catalyst,Perl,Internationalization,Catalyst,我已经通过(或更具体地说,通过)使我的网站成为多语言网站 我的maketext类通过从数据库加载词典,在编译时将其加载到包var%lexicon中 我想在我的应用程序中为词典添加一个管理界面,但我想不出重新加载词典的方法。我向每个语言环境类添加了一个方法来刷新%Lexicon哈希,该哈希在dev中运行得很好,但在分叉服务器()上运行时,它当然只会在该服务器进程中重新加载包var 然后我想也许我可以把词典放在缓存中,在需要时可以过期。但是,Locale::Maketext中的%Lexicon哈希在

我已经通过(或更具体地说,通过)使我的网站成为多语言网站

我的maketext类通过从数据库加载词典,在编译时将其加载到包var%lexicon中

我想在我的应用程序中为词典添加一个管理界面,但我想不出重新加载词典的方法。我向每个语言环境类添加了一个方法来刷新%Lexicon哈希,该哈希在dev中运行得很好,但在分叉服务器()上运行时,它当然只会在该服务器进程中重新加载包var

然后我想也许我可以把词典放在缓存中,在需要时可以过期。但是,Locale::Maketext中的%Lexicon哈希在运行时开始时填充,我不知道如何在每次请求时从缓存中填充它


我最新的想法是覆盖Locale::Maketext的一部分,但我正在寻找任何明智的想法:)

如果您愿意在某些请求中受到轻微的性能影响,您可以在每次调用
Maketext()
时检查文件的md5sum

例如:

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;
}
package-MyMakeText;
严格使用;
使用警告;
使用Digest::MD5;
我的@PO_文件=('example.PO');
我的%FILE\u到\u摘要;
我的$定位器;
子生成文本{
如果(文件已更改()||!$LOCALIZER){
$LOCALIZER=get_handle();
}
返回$LOCALIZER->maketext(@);
}
子文件已更改{
我的$files\u have\u change=0;
我的$po_文件(@po_文件){

open(我的$fh),我也在考虑一个绑定的散列,但这似乎可能是一个性能消耗