Zend_Translate проблемы между двумя языками

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

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

  • zh_Hans
  • zh_Hant

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

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

Фактический язык, который мне доступен, это zh, а не 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_ был доступен для Zend_Translate?
    - ссылаясь на другой мой вопрос, zh_HK и zh_CN неверны. zh_Hans / zh_Hant is

2 ответа

Решение

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

  $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 будут без проблем работать вместе. Может быть, у кого-то есть идея чище...

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

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

Другие вопросы по тегам