2011-03-11 7 views
1

Zend Framework를 기반으로하는 응용 프로그램을 업데이트해야합니다. 텍스트의 대부분 다국어로 응용 프로그램을 업데이트 할 때 수행해야 할 단계는 무엇입니까?

응용 프로그램은 3 개 언어 , 말에서 사용할 수 있습니다 특정 언어 (내용이 모두 동일하지 않습니다)이며, 하드 코딩 된 뷰 스크립트, 양식에 언어 당 하나 개의 도메인을해야합니다 (예 : mygreatsite.com, monsupersite.com, ilmiosupersite.com 등)

첫 번째 질문 :

응용 프로그램의이 종류를 "처리"하는 가장 좋은 방법은 무엇입니까? 언어 당

  • 하나 복사, 서로 다른 DB를 사용, 등 ... (유지 보수를 위해 아마 가장 좋은 방법)
  • 하나의 응용 프로그램, 다른 콘텐츠를 처리 :

    나는 몇 등의 솔루션을 상상할 수 DB 등의 지역에 따라 (경로 기준)

두 번째 질문 : 나는 시작하는 기존 코드에 대해 알아야 할 사항

"이주"?
i18n 웹 사이트를 구축 할 때 가장 좋은 방법은 무엇입니까?
가장 적합한 어댑터는 무엇입니까? (나는 이미 gettext()를 사용했고 그것이 최고라고 생각한다.)

답변

1

나는 전문가는 아니지만 이것이 내가하는 일이다.

내 고객이 정규 Joes 일 때 쉽게 업데이트 할 수 있기 때문에 필자는 번역 어댑터로 array를 사용합니다. 그리고 문장 대신 번역 키를 사용합니다. 예를 를 들어 어떤 사람들은 내가 이것은 내가 찾고 텍스트를 변경하는 경우 알려하는 것이 훨씬 쉽게

$this->translate(‘default-index-dashboard-title’); 

를 사용

$this->translate(‘Some sentence to translate’); 

사용할 수 있습니다. 그래도 다른 장점이 있는지 나는 모른다.

부트 스트랩에 번역 어댑터와 번역 캐시를 설치해야합니다 (원하는 경우). 나는이 같은 광산을 수행

protected function _initLocale() 
{ 
    $locale = new Zend_Locale(Zend_Locale::BROWSER); 
    $config = Zend_Registry::get('config'); 
    Zend_Registry::set('Zend_Locale', $locale->toString()); 
    return $locale; 
} 

protected function _initTranslation() 
{ 
    try{ 
     $translate = new Zend_Translate(array('adapter' => 'array', 'content' => ROOT . '/callmanagement/languages/' . strtolower(Zend_Registry::get('Zend_Locale')) . '.php')); 
    }catch(Exception $e){ 
     $translate = new Zend_Translate(array('adapter' => 'array', 'content' => ROOT . '/callmanagement/languages/en_gb.php')); 
    } 

    Zend_Registry::set('Zend_Translate', $translate); 
    return $translate; 
} 

나는 사이트가 완전히 다른 않는 한 하나의 코드베이스를 사용하여 하나의 데이터베이스에서 공유 데이터를 저장하고 사이트의 특정 물건을 다른 데이터베이스가있는 것입니다.

부트 스트랩 또는 congfig에서 여러 db 어댑터를 설정할 수 있습니다.

$dbLocal = new Zend_Db_Adapter_Pdo_Mysql(array(
     'host'  => 'localhost', 
     'username' => $result['user'], 
     'password' => $result['password'], 
     'dbname' => $result['database'] 
    )); 
    Zend_Db_Table_Abstract::setDefaultAdapter($dbLocal); 

    $dbShared = new Zend_Db_Adapter_Pdo_Mysql(array(
     'host'  => 'localhost', 
     'username' => ‘root’, 
     'password' => 'pass', 
     'dbname' => 'dbname' 
    )); 

    Zend_Registry::set('db_local', $dbLocal); 
    Zend_Registry::set('db_shared', $dbShared); 
    return $dbLocal; 

번역 필드에 번역 키를 넣으면 번역 할 Zend Form을 얻을 수 있습니다.

$this->addElement(‘text’, ‘test’, array(‘label’ => ‘translation-key’, ‘required’ => true)); 등당신이 Zend_Db_Table_Abstract 클래스를 사용하는 경우

그런 다음 당신은 다음과 같이 기본 스키마와 데이터베이스 연결을 변경할 수 있습니다 : 어떤 더 많은 예제가 필요한 경우

class Default_Model_Table_Topics extends Zend_Db_Table_Abstract 
{ 
protected $_name = 'topics'; 
protected $_id = 'topic_id'; 
protected $_rowClass = 'Default_Model_Topic'; 

protected $_schema = 'dbname'; 
protected $_adapter = 'db_shared'; 

}

나는 시도하고 도움이됩니다.

+0

'try {} catch() {}'대신에 다음과 같이 사용하는 것이 좋습니다 (http://framework.zend.com/manual/en/zend.translate.additional.html#zend.translate.additional .languages.automatic)'$ translate-> isAvailable ('your-language-here')' – Poru

+0

$ this-> translate ('default-index-dashboard-title'); 이렇게하면 fallback 문자열은 default-index-dashboard-title이며 최종 사용자에게는 의미가 없습니다. 이 접근법을 사용하면 조심해야하고 번역이 있는지 확인해야합니다. – Xerkus

+0

사실 번역본이 없으면 대부분의 사이트가 영어로 바뀝니다. 무엇이든 당신이 가장 편안합니다. –

관련 문제