Php 如何从Zend Framework 2中的URI获取translator base_dir?

Php 如何从Zend Framework 2中的URI获取translator base_dir?,php,zend-framework2,Php,Zend Framework2,你好,ZF2大师!通常,我们从Appliction module.config.php中的目录获取zf2翻译文件,如下所示:'base_dir'=>dir'//语言“。 是否可以从Uri获取它 Application module.config.php: 'translator' => array( 'locale' => 'en_US', 'translation_file_patterns' => array(

你好,ZF2大师!通常,我们从Appliction module.config.php中的目录获取zf2翻译文件,如下所示:
'base_dir'=>dir'//语言“
。 是否可以从Uri获取它

Application module.config.php:
    'translator' => array(
             'locale' => 'en_US',
             'translation_file_patterns' => array(
                 array(
                     'type'     => 'gettext',
                      'base_dir' => __DIR__ . '/../language',//http://example.com/
                     'pattern'  => '%s.mo',
                 ),
             ),
         ),

为什么这很重要?
如果我错了,请纠正我!在多语言应用程序中,语言文件是静态文件,对于真实世界的应用程序,任何静态文件最好位于云上,如AWS CloudFront或CDON,以提高应用程序的性能和更长的缓存时间。

我认为这种方式不可能,我认为将此文件放在应用程序目录之外不会有任何问题,因为它是应用程序的一部分您的PHP软件将在每次HTTP请求时由web服务器进行解释和“编译”


例如,它正在使用AJAX请求对导航器下载的JSON文件进行交互测试,因为导航器会将文件存储在缓存中。

我们的解决方案是确定
application.config.php中的当前语言是什么:

define ('SITE_LANG', ...);
'translator' => [
        'locale' => SITE_LANG,
        'translation_file_patterns' => [
            [
                'type' => 'phparray',
                'base_dir' => 'vendor/zendframework/zendframework/resources/languages/',
                'pattern' =>  '%s/Zend_Validate.php',
            ],
在我们的例子中,它只是路径的前两个字母: www.site.com/en/

然后在
module.config.php
中:

define ('SITE_LANG', ...);
'translator' => [
        'locale' => SITE_LANG,
        'translation_file_patterns' => [
            [
                'type' => 'phparray',
                'base_dir' => 'vendor/zendframework/zendframework/resources/languages/',
                'pattern' =>  '%s/Zend_Validate.php',
            ],

它成功了。

有趣!但是语言文件仍然位于同一台服务器上。它们应该在其他地方吗?这就是问题所在!通常,语言文件位于应用程序目录下或vender/framework/resources/languages/下。语言文件可以在其他域上吗?Fx base_dir=>'',我不这么认为。它们是应用程序的重要组成部分。它们不像CSS文件或图像。