请提供我的文件夹strusture和简单的小代码 申请zend_translate和zend_locale。
所以我会对它有所了解。 我提到了framework.zend,但无法理解我应该在控制器,索引,boorstrap甚至视图中提到的内容。 使用zend_translate和zend_locale对我来说似乎很麻烦。 请帮帮我。
答案 0 :(得分:1)
举个例子,对于简单的翻译,我在application.ini中定义了以下内容:
resources.translate.data = APPLICATION_PATH "/translations/nl/"
resources.translate.locale = "nl"
在/ translations / nl /目录中,我有一个或多个翻译文件(.php,.ini,...)。
基本上,这就是你所需要的一切。
答案 1 :(得分:1)
我正是这样做的,
<强> bootstrap.php中强>
protected function _initTranslate()
{
$translate = new Zend_Translate(array(
'adapter' => 'gettext',
'content' => APPLICATION_PATH . '/locale/en-US.mo',
'locale' => 'en'
));
Zend_Registry::set('translate', $translate);
Zend_Form::setDefaultTranslator($translate);
$this->bootstrap('view');
$view = $this->getResource('view');
$view->translate = $translate;
}
如果我必须从控制器发送消息。 。我做了
<强> AuthController.php 强>
$this->view->message = 'success';
然后在视图中
<强> login.phtml 强>
if (isset($this->message)) {
echo $this->translate->_($this->message);
}
以上内容将从'en-us.mo'文件中输出'sucesss'的翻译值。
希望有所帮助!
答案 2 :(得分:1)
这是我正在使用的解决方案:
Plugin.php
的代码 // BEGIN: Translate
$validLang = $this->getRequest()->getParam('lang');
$translate = new Zend_Translate('csv', 'data/lang/en.csv', 'en');
$translate->addTranslation('data/lang/ro.csv', 'ro');
if($validLang)
{
Zend_Registry::set('lang', $validLang);
$translate->setLocale($validLang);
}
else
{
Zend_Registry::set('lang', 'en');
$translate->setLocale('en');
}
Zend_Registry::set('translate', $translate);
// END: Translate
en.csv
的代码front_user_menu-wall;Wall
ro.csv 的代码
front_user_menu-wall;Perete
任何 Zend View文件的代码
echo Zend_Registry::get('translate')->_('front_user_menu-wall');
还有一些解释:
在文件夹data / lang中,我有2个.csv翻译文件。结构是自解释的,分号(;)将变量名(front_user_menu-wall)与变量值(Wall)分开。每个变量都必须放在一个新行上,你可以在里面添加行注释(例如:#this是注释)。 ro.csv文件是罗马尼亚语翻译文件,它具有相同的结构,但变量的值明显不同。
你在Plugin.php里面有
$validLang = $this->getRequest()->getParam('lang);
Zend相当于
$validLang = $_GET['lang'];
在接下来的两行代码中,我们使用2个转换.csv文件实例化一个新的Zend_Translate类。接下来我们检查$ validLang是否为空,如果不是它们,我们将Zend_Registry lang变量(Zend_Registry与$ _SESSION类似)与转换文件一起设置。如果$ validLang为空,则我们将翻译默认为英语。
如果您执行了上述所有步骤,则现在可以回显
Zend_Registry::get('translate')->_('front_user_menu-wall');
获取英语或罗马尼亚语翻译。
答案 3 :(得分:0)
这是我的解决方案:
protected function _initTranslate()
{
//set gettext adapter
$translate = new Zend_Translate('Gettext', APPLICATION_PATH . '/languages',
null, array('scan' => Zend_Translate::LOCALE_FILENAME));
// get locale from url
if (preg_match("/^\/([a-zA-Z]{2})($|\/)/", $_SERVER['REQUEST_URI'], $matches)) {
$lang = $matches[1];
} else {
//if locale not exsist in url - get browser locale
$locale = new Zend_Locale(Zend_Locale::BROWSER);
$lang = $locale->getLanguage();
}
if (!$translate->isAvailable($lang)) {
$lang = 'en';
}
$translate->setLocale($lang);
$front = $this->getResource('FrontController');
$front->setBaseUrl('/' . $lang . '/');
Zend_Registry::set('Zend_Translate', $translate);
$locale = $translate->getLocale();
$source = APPLICATION_PATH . '/languages/'.$locale.'.mo';
$translate->addTranslation($source, $locale);
}