也许我现在还没有完全理解文档,但有没有办法设置一个唯一的标识符,以便我的缓存翻译不会被覆盖?
每个域都有相同的命名空间。
以下是我目前在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 VirtualHosts,在每个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。
我希望这不会太混乱。
所以最后,有没有办法在每个主机上设置某种类型的唯一标识符,因此它们不会互相覆盖,因为它们现在存在于同一台机器上?
答案 0 :(得分: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,
),
),
))
)
对于每个应用程序,您只需编辑本地配置文件并共享全局缓存选项。