1

也许我现在还没有完全理解文档,但是有没有办法设置一个唯一标识符,这样我的缓存翻译就不会被覆盖?

每个域都有相同的命名空间。

这是我的 module.config.php 中的内容

'translator' => array(
    'locale'                    => 'en',
    'translation_file_patterns' => array(
        array(
            'type'        => 'gettext',
            'base_dir'    => __DIR__ . '/../language',
            'pattern'     => '%s.mo',
            'text_domain' => 'ftp'
        )
    ),
    'cache' => \Zend\Cache\StorageFactory::factory(array(
        'adapter' => 'apc',
        'plugins' => array(
            'exception_handler' => array(
                'throw_exceptions' => false
            )
        )
    ))
)

现在我在同一台机器上运行了两个 Apache VirtualHost,在每个 VirtualHost 中我都有一个名为 Ftp 的模块,每个模块都使用 ftp text_domain 来翻译它们自己的翻译。

假设我有一个名为 translate_this_text 的翻译键,用于两个域。

在 domain1.com 上它会读取,Test1 在 domain2.com 上它会读取,Test2

如果我访问 domain1.com 文本被翻译成 Test1 如果我访问 domain2.com 文本被翻译成 Test1,但这应该是 Test2

如果我清除 APC 缓存并访问 domain2.com,则翻译显示 Test2,但如果我访问 domain1.com,则显示 Test2。

我希望这不会太混乱。

所以最后,有没有办法在每个主机上设置某种类型的唯一标识符,这样它们就不会相互覆盖,因为它们现在存在于同一台机器上?

4

1 回答 1

2

adapter值替换为数组,以便您可以将选项注入 APC 适配器:

'translator' => array(
    'cache' => \Zend\Cache\StorageFactory::factory(array(
        'adapter' => array(
            'name'    => 'apc',
            'options' => array(
                'namespace' => 'foo_bar',
            ),
        ),
        'plugins' => array(
            'exception_handler' => array(
                'throw_exceptions' => false
            )
        )
    ))
)

我会在你的全局文件中写上没有 namespace键的配置,然后config.local.php你添加这个规则:

$cache_namespace = 'foo_bar';

'translator' => array(
    'cache' => \Zend\Cache\StorageFactory::factory(array(
        'adapter' => array(
            'options' => array(
                'namespace' => $cache_namespace,
            ),
        ),
    ))
)

对于每个应用程序,您都可以简单地编辑本地配置文件并共享全局缓存选项。

于 2013-01-20T20:09:40.563 回答