【发布时间】:2010-12-09 18:19:28
【问题描述】:
我一直在尝试使用 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 translate 或 zend navigation 中是否有某种编码设置?
请帮忙!
Zend 库版本:1.11
【问题讨论】:
标签: php zend-framework special-characters zend-navigation zend-translate