Проблема кодирования с Zend Navigation с использованием Zend Translate Испанский в XMLTPX файле Специальные символы - PullRequest
1 голос
/ 09 декабря 2010

Я пытался использовать 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), чтобы увидеть, если это имеет значение.В итоге я получил файл TMX, который закодирован с использованием ISO-8859-1 (в противном случае выдается ошибка синтаксического анализа 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();

Он будет отображать все пункты меню очень хорошо, за исключением одного с использованием специальных символов. Он будет просто пустым.

СЕЙЧАС - если я использую PHP-кодирование UTF8 внутрикласс Zend Framework 'Menu', который я НЕ хочу делать:

Строка 215 в Zend_View_Helper_Navigation_Menu:

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));
    }
}

Тогда он работает. Пункт меню отображается правильно и все радостно.1021 *

Дело в том, что я не хочу изменять библиотеку.

Существует ли какая-либо настройка кодирования в Zend Translate или Zend Navigation, которую я не нахожу?

Пожалуйста, помогите!

Zend Library Версия: 1.11

1 Ответ

0 голосов
/ 03 января 2011

У меня была связанная проблема: в Zend Form не отображались латинские символы, такие как ñ. Попробуйте добавить следующее в вашу функцию _initView в bootstrap.php:

$view->setEncoding('iso-8859-1');  
...