3

나는이 주제가 몇 차례 논의 된 것을 알고 있지만 그것들 중 어느 것도 나를위한 궁극적 인 해결책을 제시하지 못한다.Zend, l18n mysql을 사용하여 다국어 데이터베이스를 모델링하는 방법?

상황 나중에 다국어 콘텐츠를 보유해야하는 관계형 mysql 데이터베이스를 설계하고 있습니다. 위키 백과 또는 Microsoft Tech Support 페이지에서 알 수 있습니다. 내용은 모든 언어에 대해 동일해야합니다. 예 : 번역이 누락 된 경우 사이트에서 자동으로 번역 된 동일한 콘텐츠 또는 정보를 사용할 수있는 언어를 제공합니다. 일부 값을 설정하지 않으면 두 번째 또는 기본 브라우저 언어로 대체하거나 번역해야합니다. 구글을 통해. 개발 환경은 Zend입니다. 문제를 해결하기위한 지금까지입니다

내 아이디어 :

두 기본 키 (ID, 언어) 장점 : 데이터베이스 추상화 레이어를 통해 간편한 데이터베이스 액세스. 문제 : 외래 키, 관계 배송, 대체품

언어 접미사가있는 열 : 장점 : DB 성능, 관계형 문제 없음. 문제점 : 데이터베이스 추상화 계층에서이 문제를 처리 할 수 ​​없습니까?

그 자체로 입증 된 개념이나 다른 개념보다 바람직합니까? 누구든지 이미 이와 같은 것을 만들었으며 나와 경험을 공유 할 수 있습니까? 이 상황에 맞게 수정 된 Zend DB 컨트롤러가 있습니까? 이 정보를 양식에 어떻게 연결합니까?

도움, 의견 및 제안에 감사드립니다.

안부,

마누엘

+0

doctrine I18n 동작을 사용하고 싶습니다 http://www.doctrine-project.org/projects/orm/1.2/docs/manual/behaviors/en#core-behaviors:i18n 및 mt 시간 조금 저장 :) – tawfekov

답변

1

번째 옵션은 유지 보수가없는 것 (이는 마이너스 측에 첨가한다). 실제로 다른 언어를 추가하려면 테이블 추상화 레이어를 수정해야합니다. 악몽 같은데.

첫 번째 옵션은 훨씬 더 유망한 것처럼 보이지만 불행히도 제대로 작동하려면해야 할 일이 많이 있습니다. 그러나 제 경험상 이것은 전형적인 해결책입니다. 그래서 나는 바퀴를 재발 명하지 않을 것입니다.
내가 추가해야 할 것은 젠드 측면에서 언어 대체가 수행되어야한다는 것입니다. 데이터베이스는 일부 정보가 누락 될 것입니다. 어떤 종류의 색인 표를 생각해 보면 내용의 고유 한 ID 및 사용 가능한 언어와 같은 정보를 보유 할 수 있습니다. 무언가를 제공해야한다면, 그러한 기록을 읽고, 수락 언어와 비교하고, (가장 적합한 언어를 사용하여) 유효한 내용을 데이터베이스에 다시 요청하십시오. 유일한 문제는 어떻게 든 인덱스 테이블을 만들어야한다는 것입니다 (콘텐츠 테이블에 콘텐츠를 삽입 할 때 트리거되는 가장 좋은 방법).

많은 작업이 있지만 너무 쉽지는 않습니다.

+0

감사합니다 @Pawel Dyda 및 @tawfekov! – Manuel

+0

@ tawfekov 교리는 파벨이 묘사 한 것과 정확히 똑같은 것을하고 있다고 생각합니다. 정보를 공유하면 어떻게됩니까? 공유 된 정보는 ID 테이블과 함께 전달되며 모든 언어 관련 내용은 참조 된 테이블로 이동합니다. 조인으로 검색합니까? doctrine을 Zend에 통합 할 수 있습니까? doctrine은 언어가있는 관계형 데이터베이스를 처리 할 수 ​​있습니까? 좋은 자습서/예를 알고 있습니까? – Manuel

+0

@Manual 교리 내용은 Zendcasts.com http://www.zendcasts.com/category/screencasts/databases/doctrine-databases/에서 확인하십시오. 또한 Jon Lebensold http://itunes.apple.com/에서 비디오 podcast를 확인하십시오. us/podcast/zend-screencasts-video-tutorials/id300758106 –

0

지금 당장 똑같은 문제가 발생합니다.

어쨌든 모든 것을 동일한 데이터베이스에 추가하는 것은 의미가 없습니다. 말하자면 극단적으로 가서 50 개 언어를 지원하면 내 DB를 부풀게 할 수 있습니다. 그래서 저는 메인 DB를 유지하고 Zend_Translate 개념을 도입하는 경향이 있습니다. Zend_Translate는 당신이 찾고있는 대체 솔루션을 제공합니다.주요 내비게이션 및 핵심 디자인은 내 웹 사이트에별로 문제가되지 않지만 현재 가장 큰 관심사는 모든 주요 컨텐츠를 저장하는 방법과 번역하는 방법입니다.이 요소에는 HTML이 포함되어 있기 때문입니다. 주요 내용에 대해서는 대체 접근법을 사용하고 각 언어에 대한 테이블이있는 별도의 DB를 사용합니다.

+0

은 그 밑에 해결할 아이디어를 올렸습니다. 이 아이디어에 대해 어떻게 생각하십니까? – Manuel

+0

@Manuel 나는 약간의 차이점을 가지고 같은 지점에 서 있습니다. TMX를 사용할 것이고 번역이 있다면 해당 열의 내용 (즉 기본 언어)을 tmx 파일로 옮기고 'tmx'문자열을 추가합니다. 그래서 저는 여러분과 같은 모든 칼럼을 점검 할 것입니다.하지만 $ value === 'tmx'를 얻으면 1,2,3 언어 결정을 Zend_Translate에 위임 할 것입니다. –

+0

하지만 이것은 항상 하나의 주요 언어 (아마 영어)에서 왔음을 의미하고 다른 언어로 번역하는 것입니까? 내 입력은 m : n 언어에서부터 시작됩니다. 예 : 독일어에서 영어로, 스페인어에서 프랑스어로 이것은 아마도 번역 파일로는 꽤 어려울 것입니다. 내 핵심 응용 프로그램은 Zend와 함께 번역 될 것입니다. – Manuel

0

내 플래트 폼은 커뮤니티 기반 데이터베이스입니다. 그래서 저는 실제로 그것을 번역하는 인간들에게 의존 할 것입니다. 어쨌든 정보를 저장해야하므로 첫 번째 관심사는 데이터베이스 크기 나 성능이 아니라 쉬운 사용법입니다. 지금까지 내 생각은 위에서 설명한대로 구조를 구현하는 것입니다. 교리에 사용할지 여부는 아직 확실하지 않습니다.

언어 결정 : 시작, 응용 프로그램은 사용자가 언어, 보조 언어, 기사의 영어 어머니 통을 미리 가져옵니다. 데이터베이스에서 기사 가져 오기 모든 열에 대해 다음을 확인합니다. 1. 기본 언어는 사용할 수 있습니까? 2. 보조 언어를 사용할 수 있습니까? 3. 어느 쪽도 아닌 경우 모국어 또는 영어로 기사를 표시하고 사용자가 Google translate api의 제안 사항을 번역하도록 사용자에게 제공합니다. 아마도 컨트롤러를 코팅하고 조작하거나이를 수행하는 비즈니스 모델을 구축하는 것이 꽤나 쉽습니다.

@tawfekov는 doctrine과 쉽게 비슷하게 구현할 수 있습니까?