Zend_Translate проблемы между двумя языками - PullRequest
0 голосов
/ 01 августа 2011

По горячим следам другого моего вопроса:

Этиэто два языка, которые я хочу предоставить для использования Zend Framework.Когда пользователь решает, что он не хочет использовать английский в качестве основного языка, ему предоставляется возможность выбрать альтернативный язык:

  • zh_Hans
  • zh_Hant

Когда я использую предыдущее со следующим кодом:

 require_once 'Zend/Locale.php';
 $locale = new Zend_Locale();
 $locale->setLocale('zh_Hans'); // for example

Фактический язык, который мне доступен, это ч , а не zh_Hans или zh_CN

Итак, теперь, когда дело доходит до использования Zend для перевода

 require_once 'Zend/Translate.php';
 $translate = new Zend_Translate(array('adapter' => 'array',
                  'content' => 'translations/zh_Hant.trans',
                  'locale' => $locale->getLanguage()
                  ));

Не удается ...потому что zh не существует как языковой файл.это ожидается, поскольку я говорю $translate, что $locale является языком ...

  1. Поэтому я пытаюсь сделать следующее:

    'locale' => $locale->getLanguage() . '_' . $locale->getRegion()

Это также не работает, так как $ locale-> getRegion () пусто ...

Вопрос:

  • Как правильно установить язык локали удаленного пользователя с помощью инфраструктуры Zend, чтобы language _ region был доступен для Zend_Translate?
    - ссылаясь на мой другой вопрос, zh_HK и zh_CN неверны.zh_Hans / zh_Hant is

Ответы [ 2 ]

0 голосов
/ 01 августа 2011

Мой менее элегантный хак:

  $supported_langs = array(
    'en_US' => 'en_US',
    'en_GB' => 'en_GB',
    'zh_Hans' => 'zh_CN',
    'zh_Hant' => 'zh_HK',
    'es' = > 'es'
  );

  require_once 'Zend/Translate.php';
  $targetLanguage = $locale->getLanguage();
  if ($locale->getRegion() != null) { 
     $targetLanguage = $locale->getLanguage() . '_' . $locale->getRegion();
  }
  $contentFile = dirname(__FILE__) . '/../translations/' . $locale->getLanguage() . '/general-' . $targetLanguage . '.trans';
  $translation_language = array_search($targetLanguage, $supported_langs);

  $translate = new Zend_Translate(
     array(
        'adapter' => 'array',
        'content' => $contentFile,
        'locale'  => $translation_language
        )
  );

Я надеялся, что Zend_Locale и Zend_Translate будут без проблем работать вместе. Может быть, у кого-то есть идея чище ...

0 голосов
/ 01 августа 2011

Если вы посмотрите на классы адаптера перевода, вы не найдете ничего, что выглядит удаленно, как будто они поддерживают регионы. На самом деле они делают больше, чтобы раздеть регионы. Боюсь, вы должны написать (расширить) свой собственный адаптер для поддержки регионов.

Зенд-классы - это независимые объекты, которые иногда работают вместе почти как магия, но они по-прежнему являются отдельными сущностями. Хотя у нас есть большая поддержка с регионами в Zend_Locale, это не значит, что она также реализована в translate. Впрочем, это может произойти в будущем.

...