Php 创建函数以确定和设置应用程序语言的正确位置
我的应用程序包含几种基于域扩展的语言。该语言将用于数据库查询并设置正确的区域设置 我想知道设置语言设置器/获取器的正确方法或位置是什么 目前我有两个方案Php 创建函数以确定和设置应用程序语言的正确位置,php,database,zend-framework2,locale,Php,Database,Zend Framework2,Locale,我的应用程序包含几种基于域扩展的语言。该语言将用于数据库查询并设置正确的区域设置 我想知道设置语言设置器/获取器的正确方法或位置是什么 目前我有两个方案 我在自己的供应商库中创建了一个类,我可以在Module.php中调用该类来设置正确的翻译,或者在何处为查询获取正确的语言代码 我在应用程序/模型/语言中创建了一个函数,用于在Module.php中设置或获取应用程序语言,并在控制器和/或数据库模型中获取该语言 描述了应用模型 应用程序结构将使用完全相同的代码处理两种语言。文本将通过ZF2翻译模块
public function onBootstrap(MvcEvent $e)
{
$application = $e->getApplication();
$eventManager = $application->getEventManager();
$moduleRouteListener = new ModuleRouteListener();
$moduleRouteListener->attach($eventManager);
# Set application language
$appLanguage = $this->_setApplicationLanguage();
$translator = $application->getServiceManager()->get('translator');
$translator->setLocale($appLanguage);
}
private function _setLanguage()
{
# Default language
$language = 'nl_NL';
# Supported languages (will be served by database later)
$aSupportedLanguages = array('en_US' => 'en', 'de_DE' => 'de', 'fr_FR' => 'fr');
# Explode host
$aExplode = explode('.', $_SERVER['HTTP_HOST']);
# Loop through http host parts
foreach ($aExplode as $key => $value) {
# Match for tld
if (in_array($value, $aSupportedLanguages)) {
$language = array_search($value, $aSupportedLanguages);
break;
}
}
return $language;
}
谢谢你的建议。我这样做的
'translator' => [
'locale' => 'en',
'translation_file_patterns' => [
[
'base_dir' => __DIR__.'/../../module/Application/languages/phpArray',
'type' => 'phpArray',
'pattern' => '%s.php',
],
],
'cache' => [
'adapter' => [
'name' => 'Filesystem',
'options' => [
'cache_dir' => __DIR__ . '/../../data/cache/frontend',
'ttl' => '604800', // 1week
],
],
'plugins' => [
[
'name' => 'serializer',
'options' => [],
],
'exception_handler' => [
'throw_exceptions' => (APP_ENV === "development"),
],
],
],
],
final class Translate extends AbstractPlugin
{
/**
* @var Translator $translator
*/
private $translator = null;
/**
* @param Translator $translator
*/
public function __construct(Translator $translator = null)
{
$this->translator = $translator;
}
/**
* @param string $message
*
* @return string
*/
public function __invoke($message = '')
{
return $this->translator->translate($message);
}
}
namespace Application\Controller\Plugin\Factory;
use Application\Controller\Plugin\Translate;
use Zend\Mvc\Controller\PluginManager;
class TranslateFactory
{
/**
* @{inheritDoc}
*/
public function __invoke(PluginManager $pluginManager)
{
$translator = $pluginManager->getController()->getServiceLocator()->get("translator")->getTranslator();
$plugin = new Translate($translator);
return $plugin;
}
}
IndexController
中创建了languageAction()
你的问题太宽泛了。您能否通过向我们展示一些您的工作(仅相关部分)来缩小可能性,这些工作加载了什么以及何时加载,以便我们能够更好地了解您的业务流程?添加了一些代码和有关应用程序的更多说明,希望这能让您对其有更好的了解。谢谢