我一直在尝试使用 Zend Translate 向用户显示翻译后的菜单项。
在我将特殊字符引入翻译文件之前,它工作正常。
我在我的引导程序中实例化 Zend_Translate 对象,并将它作为翻译器传递给 Zend_Navigation:
$translate = new Zend_Translate(
array('adapter' => 'tmx',
'content' => APPLICATION_PATH .'/languages/translation.tmx',
'locale' => 'es'
)
);
$navigation->setUseTranslator($translate);
我使用了几种不同的适配器(数组,tmx)来看看是否有所作为。我最终得到了一个使用 ISO-8859-1 编码的 TMX 文件(否则在引入菜单项“Administrar Applicación”时会引发 XML 解析错误。
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE tmx SYSTEM "tmx14.dtd">
<tmx version="1.4">
<header creationtoolversion="1.0.0" datatype="tbx" segtype="sentence"
adminlang="en" srclang="en" o-tmf="unknown"
creationtool="XYZTool" >
</header>
<body>
<tu tuid='link_signout'>
<tuv xml:lang="en"><seg>Sign Out</seg></tuv>
<tuv xml:lang="es"><seg>Salir</seg></tuv>
</tu>
<tu tuid='link_signin'>
<tuv xml:lang="en"><seg>Login</seg></tuv>
<tuv xml:lang="es"><seg>Acceder</seg></tuv>
</tu>
<tu tuid='Manage Application'>
<tuv xml:lang="en"><seg>Manage Application</seg></tuv>
<tuv xml:lang="es"><seg>Administrar Applicación</seg></tuv>
</tu>
</body>
</tmx>
一旦我在布局中显示菜单:
echo $this->navigation()->menu();
它将很好地显示所有菜单项,除了使用特殊字符的菜单项。它只是空白。
现在 - 如果我在 zend 框架类“菜单”中使用 PHP 的 UTF8 编码,我不想这样做:
Zend_View_Helper_Navigation_Menu 中的第 215 行:
if ($this->getUseTranslator() && $t = $this->getTranslator()) {
if (is_string($label) && !empty($label)) {
$label = utf8_encode($t->translate($label));
}
if (is_string($title) && !empty($title)) {
$title = utf8_encode($t->translate($title));
}
}
然后它工作。菜单项显示正确,一切都很愉快。
问题是,我不想修改库。
在我没有找到的 zend 翻译或 zend 导航中是否有某种编码设置?
请帮忙!
Zend 库版本:1.11