2013-05-17 2 views
2

더 나은 사용자 환경을 위해 국제화 된 URL을 사용하고 싶습니다. (인트라넷의 모든 것이므로 걱정할 SEO가 없습니다).젠드 프레임 워크 URL 국제화 및 라우팅

그래서 기본적으로 내가 (영어, 네덜란드어와 프랑스어이 예에서)이 같은 URL을 싶습니다

/en/products 
/en/product/123/blue-box 
/nl/producten 
/nl/product/123/blauwe-doos 
/fr/produits 
/fr/produit/123/boite-bleue 

/nl/ 부분은 전혀 문제가되지 않습니다 모든 SO 및 인터넷을 통해 설명했다. 하지만 내 문제는 컨트롤러와 동작으로 라우팅하는 것입니다.

현재 기본 라우터에서 확장하고 Zend_Translate를 사용하여 모든 것을 영어로 번역하고 영어 이름을 기반으로 컨트롤러 및 작업을 수행합니다.

그러나 나는 이것을하기위한 더 좋은 방법이 있어야한다고 생각합니다. 누구든지이 zend 프레임 워크에 표준 구성 요소가 있는지 또는 이미 전에 이와 비슷한 것을 만들었는지를 알고 있습니까?

사양 :

PHP 5.4.4 
Zend Framework 1.11.10 

답변

2

당신은 당신의 컨트롤러를 복사 할 필요가 없습니다. 나는 이런 식으로 일했습니다

$translate = new Zend_Translate(
    array(
    'adapter' => 'array', 
    'content' => 'PATH_TO_LANGUAGES/en_url.php', 
    'locale' => 'en' 
) 
); 

$translate->addTranslation(array(
    'content' => 'PATH_TO_LANGUAGES/nl_url.php', 
    'locale' => 'nl' 
)); 

$translate->setLocale('en'); 

Zend_Controller_Router_Route::setDefaultTranslator($translate); 

언어 파일은 다음과 같이 : 당신은 컨트롤러 또는 조치를 번역 할 수 있습니다. 그러나 쿼리 매개 변수도 번역 할 수 있는지 여부는 알 수 없습니다.

// en_url.php 
return array(
    'products' => 'products', 
); 

// nl_url.php 
return array(
    'products' => 'producten', 
); 

자세한 내용은 here을 참조하십시오.

+0

setDefaultTranslator의 존재를 찾을 수 없습니다. 그래서 라우터를 확장하여 번역 작업을 직접했습니다. 이것은 실제로 그것을 훨씬 깨끗하게 만듭니다. tnx! – nvanesch

+0

@nvanesch 링크를 삽입 했으므로 더 자세히 읽을 수 있습니다. – bitWorking

관련 문제