我有两个模块-应用程序和StickyNotes。我需要在所有的页面上使用翻译。
我所做的:
1)视图:<?=$this->translate('Home');?>
2)在Application\Module.php中:
public function onBootstrap(MvcEvent $e)
{
$translator = $e->getApplication()->getServiceManager()->get('translator');
$eventManager = $e->getApplication()->getEventManager();
$moduleRouteListener = new ModuleRouteListener();
$moduleRouteListener->attach($eventManager);
$app = $e->getParam('application');
$app->getEventManager()->attach('render', array($this, 'setLayoutTitle'));
$translator->setLocale('ru_RU');
echo $translator->getLocale(); //ru_RU
}3)在StickyNotes\Module.php中:
public function onBootstrap(MvcEvent $e)
{
$translator = $e->getApplication()->getServiceManager()->get('translator');
$translator->setLocale('ru_RU');
echo $translator->getLocale(); //ru_RU
}4) Application..\module.config.php:
'service_manager' => array(
'factories' => array(
'translator' => 'Zend\I18n\Translator\TranslatorServiceFactory',
),
),
'aliases' => array(
'translator' => 'MvcTranslator',
),
'translator' => array(
'locale' => 'en_US',
'translation_file_patterns' => array(
array(
'type' => 'gettext',
'base_dir' => __DIR__ . '/../language',
'pattern' => '%s.mo',
),
),
),5) StickyNotes..\module.config.php相同:
'service_manager' => array(
'factories' => array(
'translator' => 'Zend\I18n\Translator\TranslatorServiceFactory',
),
),
'aliases' => array(
'translator' => 'MvcTranslator',
),
'translator' => array(
'locale' => 'en_US',
'translation_file_patterns' => array(
array(
'type' => 'gettext',
'base_dir' => __DIR__ . '/../language',
'pattern' => '%s.mo',
),
),
),如果我尝试$translator->getLocale();输出'ru_RU',但是翻译不起作用。
另外,如果我手动将'locale' => 'en_US',更改为'locale' => 'ru_RU',翻译,工作正常。谢谢你的回答!
发布于 2014-03-20 10:00:20
在Application\Module.php中
public function onBootstrap(MvcEvent $e) {
$translator = $e->getApplication()->getServiceManager()->get('translator');
$lang = $e->getRequest()->getQuery('lang'); // new language
$session = new Container('base');
if($lang == null && $lang == ''){
if ($session->offsetExists('lang')) {
$lang = $session->offsetGet('lang'); // current language
}else{
$lang = Settings::DEFAULT_LANGUAGE; // default language
}
}
$session->offsetSet('lang', $lang);
$loc = Settings::$locations[$lang];
$translator
->setLocale($loc)
->setFallbackLocale(Settings::DEFAULT_LANGUAGE .'_' . Settings::DEFAULT_LOCATION);
}和设置类
class Settings{
const DEFAULT_LOCATION = 'IR';
const DEFAULT_LANGUAGE = 'fa';
public static $locations = array(
'fa'=>'fa_IR',
'sa'=>'sa_SA',//Arabic (sa, sa-SA)
'tr'=>'tr_TR',
'en'=>'en_US'
);
}发布于 2014-03-19 18:06:12
只将翻译器配置放在Application\module.config.php中,并确保在应用程序模块中有语言文件夹,并将*.mo和*.po文件放在其中。
事实上,您不需要在每个模块中设置区域设置。只放进Application\Module.php
在po编辑目录->属性->源关键字->检查“翻译”字存在,它是最好的第一。
最后,<?=$this->translate('Home');?>表示反对。使用<?php echo $this->translate('Home');?>
更新1:
对不起,此代码<?=$this->translate('Home');?>不建议使用,但PHP手动建议是<?php echo $this->translate('Home');?>。
http://php.net/manual/en/language.basic-syntax.phpmode.php
发布于 2015-04-24 12:38:02
这个问题是由于没有intl扩展而造成的。
因此,只需采取以下步骤:
我不得不安装PHP扩展:
sudo apt-get install php5-intlApache重新启动:
sudo service apache2 restart检查编译了哪些扩展:
php -mhttps://stackoverflow.com/questions/22513140
复制相似问题