문제

나는 여러 언어를 처리하기 위해 상당히 큰 웹 앱을 조정해야 하는 프로젝트를 진행하려고 합니다.이 작업은 손으로 만든 PHP 코드로 실행되지만 꽤 깨끗합니다.

그렇게 하는 가장 좋은 방법이 무엇인지 궁금합니다.

  1. 스스로 무언가를 만들고, 실제 건축물에 맞추려고 노력합니다.

  2. i18n을 관리해 줄 프레임워크(예: Symfony)를 사용하여 그것의 상당 부분을 다시 작성하시겠습니까?

옵션 1의 경우 i18n 데이터를 어디에 저장해야 합니까?*.po, xliff, 순수 DB?

나는 대안을 생각했습니다.번역에만 Symfony를 사용하고 이미 있는 그대로 웹 사이트를 로드하도록 컨트롤러를 설정합니다.빠르지만 더럽습니다.반면에 다음 수정을 통해 전체 Symfony로 천천히 이동할 수 있습니다.이 웹사이트는 정말 그럴 만한 좋은 후보입니다.

그러나 전체 웹 프레임워크보다 작업을 더 잘 수행할 수 있는 독립형 번역 엔진이 있을 수도 있습니다.마치 바주카포로 파리를 죽이는 것과 같습니다.

도움이 되었습니까?

해결책

이 문제를 해결하는 방법에는 여러 가지가 있습니다.그들 중 어느 것도 "최선의 방법"은 없으며 모두 단기 또는 장기적으로 문제가 있습니다.가장 먼저 말해야 할 것은 다국어 사이트는 쉽지 않다는 것입니다. 번역가와 사랑스러운 사람들은 함께 일하기 어렵고 대부분의 프로그래머는 문제를 기술적인 문제로만 본다는 것입니다.번역을 하는지 현지화를 하는지에 대한 이 답변의 범위를 벗어나는 또 다른 차원도 있습니다.여기에는 대상 청중의 문화적 관습을 살펴본 다음 해당 문화에 맞게 언어, 스타일, 레이아웃, 색상, 서체 등을 조정하는 작업이 포함됩니다.마지막으로 심각한 작업이나 정확성이 필요한 경우에는 MT(기계 번역)를 사용하지 마십시오. 번역가를 확보할 때 외국어를 모국어로 번역하는지 확인하십시오. 즉, 대상 언어의 모든 뉘앙스를 이해하고 있음을 의미합니다.

오른쪽.솔루션.사이트를 다시 작성하고 싶지 않다면 보유하고 있는 사이트를 복제하고 사본을 대상 언어로 번역하세요.코드 베이스가 안정적이라고 가정하면 VCS를 사용하여 코드 변경 사항을 관리할 수 있습니다.대상 언어에 맞게 사이트의 개별 부분을 조정할 수 있습니다. 예를 들어 프랑스어 텍스트는 동등한 영어 텍스트보다 평균 30% 더 크므로 한 사이트를 사용하여 이를 전달하면 형식 문제가 있을 수 있으며 텍스트를 교체해야 할 수 있습니다. 언어에 따라 다른 CSS 파일이 들어오고 나갑니다.투박한 방법으로 보일 수도 있지만 사이트가 얼마나 오랫동안 존재할 수 있을까요?이런 방식으로 수행하는 데 따른 관리 오버헤드는 다른 옵션보다 적을 수 있습니다.

재구축하지 않고 두 번째 방법.현재 사이트의 모든 콘텐츠를 태그로 바꾼 다음 다른 언어를 파일 또는 DB 테이블에 넣고 사용자가 원하는 언어를 스니핑합니다(기본 설정을 할 수 있는 등록된 사용자가 있습니까, 아니면 브라우저 언어 태그를 얻고 싶습니까? 아니면 선택하는 것은 URL dot-com dot-fr, dot-de가 될 것입니다) 그런 다음 태그를 대상 언어로 바꿉니다.그런 다음 크기 문제와 이미지 문제를 별도로 해결해야 합니다.이 솔루션은 Symfony 및 Zend와 같은 프레임워크가 l10n을 구현할 때 적용됩니다.

그런 다음 프레임워크 또는 gettext를 사용하여 다시 빌드하고 더 깔끔한 솔루션을 가질 수 있지만 프레임워크는 번역이 아닌 다른 문제를 해결하도록 설계되었으며 번역 구성 요소는 전체 솔루션이 아닌 부분 솔루션으로 프레임워크에 들어왔다는 것을 기억하십시오.

모든 솔루션의 가장 큰 문제는 지속적인 유지 관리입니다.왜냐하면 유지해야 할 코드 베이스뿐만 아니라 여러 언어 베이스도 있기 때문입니다.올인원 솔루션이 정말 영리하고 효과적이지 않으면 지속적인 작업이 어려울 것입니다.

다른 팁

언어 파일에서 작업하십시오.

  1. 각 텍스트 문자열을 변수로 바꾸십시오
  2. 언어 당 하나의 언어 파일을 생성하고 해당 텍스트로 각 변수를 정의합니다. (French.inc, Dutch.inc ...)
  3. 각 페이지에 올바른 파일을 포함하십시오.

그것은 작은 사이트를위한 것입니다.

더 커지면 파일을 DB로 교체하십시오. :)

번역하기 전에 관련된 두 단계가 있다는 점을 알아두는 것이 중요합니다.

  1. 국제화:즉, 사이트에서 여러 언어를 처리할 수 있도록 하는 것입니다.
  2. 현지화:여기에는 텍스트(1단계에서 얻은)를 지원하려는 각 언어로 번역하는 것이 포함됩니다.

이에 대한 자세한 내용은 Wikipedia에서 확인하세요..

1단계에서는 일부 언어가 오른쪽에서 왼쪽(RTL)으로 작성되고 일본어나 중국어와 같은 비유럽어 문자로 작성된다는 사실을 고려해야 합니다.이러한 언어와 문자를 처리할 계획이 없다면 더 간단할 수 있습니다.

이러한 유형의 상황에서는 언어 파일(실제로는 지원하려는 언어만큼 많은 언어 파일을 갖고 싶고 각각의 이름은 다음과 같습니다. langcode.php 에서와 같이 en.php 또는 fr.php) 사이트에 사용된 모든 텍스트를 포함하는 연관 배열을 사용합니다.절차는 다음과 같습니다.

  1. 현지화해야 할 모든 단일 텍스트를 사이트에서 검색하세요.
  2. 각 페이지/섹션에 대해 $lang['sectionname'][] 정렬
  3. 각 텍스트에 대해 나는 $lang['sectionname']['textname'] 기입
  4. 나는 Lang.php 받을 클래스 lang 인스턴스화 시 매개변수가 설정되지만 그렇지 않은 경우에는 기본값이 적용됩니다. lang 수신되었습니다(이 메소드는 로드됩니다. langcode.php 매개변수에 따라 또는 선호하는 언어에 따라 기본값에 따라 다름)
  5. 수업은 setPage() 표시할 페이지/섹션을 수신하는 메소드
  6. 수업은 show() 표시할 텍스트를 수신하는 메소드(show() 주어진 페이지에 표시된 텍스트 수만큼 호출됩니다. show() 일종의 포장지 역할을 하는 것 echo $lang['mypage']['mytext'])

이렇게 하면 매우 쉬운 방법으로 원하는 만큼 많은 언어를 사용할 수 있습니다.기본 언어 페이지를 여는 언어 관리자가 있을 수도 있고(실제로 배열을 재귀적으로 읽고 텍스트 영역에 표시함) 다른 언어로 "다른 이름으로 저장..."할 수도 있습니다.

나는 비슷한 접근 방식을 사용합니다 내 사이트.비록 한 페이지에 불과하지만 제가 만들었어요 다중 페이지 사이트 이 아이디어로.

사용자가 제출한 콘텐츠나 다소 복잡한 CMS가 있는 경우에는 이야기가 달라집니다.i18n 친화적인 프레임워크를 찾을 수 있습니다(Drupal이 떠오릅니다).

당신은 볼 수 있습니다 Zend_translate, 그것은 매우 포괄적이고 잘 문서화되어 있으며 전반적인 코드 품질이 좋습니다. 또한 getText, CSV, DB, INI 파일, 배열 또는 번역 된 문자열을 저장하는 것에 대한 Unified API를 사용할 수 있습니다.

또한이 스레드를보고/시청하십시오. PHP 코드베이스의 i18N에 대한 좋은 도구/프레임 워크는 무엇입니까?. 그것은 당신의 질문과 비슷해 보입니다.

다중 바이트 문자 지원이라면 PHP에서 멀티 바이트 문자열 함수를 확인하는 것이 좋습니다.

http://uk.php.net/manual/book.mbstring.php

이것들은 다중 바이트 문자를 더 잘 처리합니다.

나는 엔진 또는 내 django/gae에 새로운 번역과 언어가 나타나는 고유 한 .po와 엔진 변환을 결합하는 HL 매개 변수와 gettext를 사용합니다. 예시 추가 :

{% get_current_language as LANGUAGE_CODE %}{{ LANGUAGE_CODE }}{% get_available_languages as LANGUAGES %}{% for LANGUAGE in LANGUAGES %}{% ifnotequal LANGUAGE_CODE LANGUAGE.0 %}{{ LANGUAGE.0 }}{% endifnotequal %}{% endfor %}

따라서 복제물로부터 보관하고 이미 번역을 완전히 사용하여 엔진 팀이 추가하거나 직접 나타날 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top