getText : 메시지 ID가 영어 텍스트가되는 것이 좋은 아이디어입니까?

StackOverflow https://stackoverflow.com/questions/216478

문제

우리는 PHP 웹 사이트를 다양한 언어로 번역 할 준비를하고 있으며 PHP의 GetText 지원은 갈 길처럼 보입니다.

내가 보는 모든 튜토리얼은 영어 텍스트를 메시지 ID로 사용하는 것이 좋습니다.

getText ( "안녕하세요!")

하지만 정말 좋은 생각인가요? 마케팅의 누군가가 텍스트를 "안녕하세요!"로 변경하고 싶다고 가정 해 봅시다. 그렇다면 모든 언어 파일을 업데이트 할 필요가 없어서 실제로 메시지 ID 인 문자열이 변경 되었으니까?

"Hello.Message"및 영어 번역 파일과 같은 종류의 일반 ID를 갖는 것이 낫습니까?

도움이 되었습니까?

해결책

나는 ""와 같은 의미있는 ID를 사용합니다.welcome_back_1"그럴 것입니다"welcome back, %1"등. 나는 항상"기본 "언어로 영어를 가지고 있으므로 특정 언어에 메시지 ID가 없을 때 최악의 시나리오에서는 영어에 빠졌습니다.

영어가 변경되면 ID도 변경되기 때문에 실제 영어 문구를 메시지 ID로 사용하는 것을 좋아하지 않습니다. 자동화 된 도구를 사용하는 경우에는 큰 영향을 미치지 않을 수도 있지만 저를 귀찮게합니다. 나는 간단한 코드 (MSG3975와 같은)를 사용하는 것을 좋아하지 않기 때문에 아무 의미가 없기 때문에 코드를 읽는 것이 모든 곳에서 댓글을 쓰지 않으면 더 어렵습니다.

다른 팁

와우, 나는 아무도 영어를 열쇠로 사용하는 것을 옹호하지 않는 것에 놀랐습니다. 나는이 스타일을 몇 가지 소프트웨어 프로젝트에서 사용했으며 IMHO는 꽤 잘 작동했습니다. 코드 가독성은 훌륭하며 영어 문자열을 변경하면 재 전송을 위해 메시지가 고려되어야한다는 것이 분명해집니다 (좋은 것).

주문을 수정하거나 번역이 필요하지 않은 다른 변경 만 할 경우 리소스 파일에서 해당 문자열의 ID를 업데이트하는 것은 간단한 문제입니다.

즉, 저는 현재 I18N을 새로운 프로젝트로 수행하는 방법을 수행할지 여부를 평가하고 있으므로 왜 좋은 생각이 아닐 수도 있는지에 대한 생각을 듣는 것이 좋습니다.

나는 Richard Harrisons가 자신이 "유일한 방법"이라고 말하는 것에 대해 대답하지 않습니다. 친애하는 Asker, "유일한 방법"이 존재하지 않기 때문에 그것이 유일한 방법이라고 말하는 대답을 신뢰하지 마십시오.

IMHO가 Richards 접근 방식에 비해 몇 가지 장점이있는 또 다른 방법은 다음과 같습니다.

  • 영어 문자열의 프로토 버전을 원본으로 사용하는 것으로 시작하십시오.
  • 이 프로토 스트링을 표시하지 말고 영어 용 번역 파일을 만듭니다.
  • 프로토 스트링을 시작의 번역에 복사하십시오

장점 :

  • 읽을 수있는 코드
  • 코드의 텍스트는 뷰가 표시되는 것과 동일하지 않으면 매우 가깝습니다.
  • 영어 텍스트를 변경하려면 프로토 스트링을 변경하지 않고 번역을 변경합니다.
  • 동일한 것을 두 번 번역하려면 약간 다른 프로토 스트링을 작성하거나 '버전을 추가하고'추가로 읽을 수있는 코드가 있습니다.

ID가 영어 인 이유는 어떤 이유로 든 번역이 실패하면 현재 언어 및 기타 오류가 발생하지 않으면 ID가 반환되기 때문입니다. 물론 개발자가 일부 문서가 아닌 원래 영어 텍스트를 작성한다고 가정합니다.

또한 영어 텍스트가 변경되면 다른 번역을 업데이트해야합니까?

실제로 우리는 영어 텍스트보다는 순수한 ID를 사용하지만 영어로 기본적으로 추가 작업을 수행해야합니다.

한마디로 이것을하지 마십시오.

영어로 동일한 단어/문구는 종종 하나 이상의 의미를 가질 수 있으며 각각의 의미는 다른 번역을 의미합니다.

문자열의 니모닉 ID를 정의하고 영어를 다른 언어로 취급하십시오.

코드의 ID 번호가 코드 가독성에 대한 악몽이라는 다른 포스터와 동의합니다.

현지화 엔지니어

고려해야 할 것이 많고 대답은 그렇게 쉽지 않습니다.

일반 영어 사용

프로

  • 작성 및 읽기가 쉽습니다
  • 대부분의 경우 코드에서 번역 기능을 실행하지 않아도 작동합니다.

단점

  • 참여 프로그래머도 훌륭한 카피라이터 여야합니다 :)
  • 당신은 영어로 올바른 정확한 텍스트를 완전히 작성해야합니다. 첫 언어를 실행 해야하는 경우에도 다른 일이 다른 것입니다 (즉, 우리는 체코 언어로 프로젝트를 시작하고 나중에이를 현지화하고 있습니다).
  • 많은 경우 컨텍스트를 사용해야합니다. Begginig에서 그것을하지 않으면 나중에 추가하는 것이 많은 일입니다. 설명 : 영어로, 한 단어는 많은 다른 변덕을 가질 수 있으며, 컨텍스트를 사용하여 차별화해야합니다. 그리고 항상 그렇게 쉬운 것은 아닙니다 (Order = 정렬 순서 또는 구매 주문이 될 수 있음).
  • 그 과정에서 나중에 영어를 수정하는 것은 매우 어려울 수 있습니다. 소스 문자열의 수정은 종종 이미 번역 된 문구의 상실로 이어질 것입니다. 영어를 수정했기 때문에 3 개의 다른 언어로 번역하는 것은 매우 실망 스럽습니다.

키 사용

프로

  • 영어에도 현지화 플랫폼 기능을 사용할 수 있습니다. 즉, 우리는 사랑스러운 크라우 딘 플랫폼을 사용하고 있습니다. 번역 관리를위한 편리한 도구 또는 오히려 완전한 워크 플로우가 많이 있습니다 : 다른 번역, 번역 내역, 용어집 (번역/언어 일관성을 유지하는 데 도움이되는), 교정, 승인 등이 프로세스를 많이 만듭니다. 더 부드럽습니다.

  • 교정 등을 위해 Engish 텍스트를 보내는 것이 훨씬 쉽습니다. 일반적으로 카피라이터가 코드를 직접 수정할 수 있도록하는 것은 좋은 생각이 아닙니다 :)

단점

  • 더 복잡한 프로젝트 설정.
  • %d, %s 등을 사용하기가 더 어렵습니다.

아직 자신의 질문에 대답하지 않았습니까? :)

분명히, 응용 프로그램의 i18N을 지원하려는 경우 모든 언어 구현을 동일하게 처리해야합니다. 누군가가 문자열을 변경해야한다고 결정하면 모든 언어 파일에서 비슷한 변경을합니다. 체크인이있는 메타 데이터는 모든 언어 파일을 동일한 변경으로 함께 그룹화해야합니다. "기본"언어가 다르게 처리되면 유지하기가 더 어려워집니다.

하루가 끝나면 번역가는 이미 자신의 일을 수행 한 프로그래머를 참여시키지 않고도 모든 언어에 대한 텍스트를 바꾸고 변경할 수 있어야합니다 (따라서 의미와 일치).

이것은 적절한 대답이 수정 된 버전을 사용하는 것 같은 느낌이 듭니다. gettext 이런 줄을 넣는 곳

_(id, backup_text, context)

_('ABOUT_ME', 'About Me', 'HOMEPAGE')

컨텍스트는 선택 사항입니다

왜 이것을 좋아합니까? 다른 곳에서 반복 될 수있는 고유 한 ID가 아닌 영어 텍스트를 사용하여 시스템에서 텍스트를 식별해야하기 때문입니다.

또한 불일치를 줄이기 위해 백업, ID 및 컨텍스트를 코드의 동일한 위치에 유지해야합니다.

ID도 읽을 수있어 동의어와 중복 사용 문제를 가져 오면 (ID로도)이 "HomePage_About_me"또는 "Mail_Letter"와 같은 ID를 접두사 할 수 있지만.

  1. 사람들은 처음에 이것을하는 것을 잊고 나중에 그것을 바꾸는 것은 문제입니다.
  2. 시스템이 ID와 컨텍스트로 그룹화 할 수있는 것이 더 유연합니다.

그렇기 때문에 마지막에 컨텍스트 변수를 추가했습니다.

백업 텍스트는 거의 모든 것이 될 수 있습니다. [about_me@homepage 텍스트로드에 실패했습니다. exames@example.com]에게 연락하십시오."

"Poedit"과 같은 현재 gettext 편집 프로그램에서는 작동하지 않지만 처음에는 밑줄없이 "t ()"와 같은 번역의 사용자 지정 변수 이름을 정의 할 수 있다고 생각합니다.

나는 getText도 컨텍스트를 지원하지만 잘 문서화되거나 널리 사용되지는 않는다는 것을 알고 있습니다.

추신 : 양호하고 확장 가능한 코드를 시행하기위한 최고의 변수 순서에 대해 확신하지 않으므로 제안을 환영합니다.

나는 당신이 결코 (대부분의 가치에 대해) 무료 텍스트를 무엇이든 열쇠로 사용하고 싶지 않다고 말할 것입니다. 예를 들어 쿼리 제목을이 페이지의 키로 사용했다고 상상해보십시오. 누군가가 링크하고 제목이 편집되면 링크가 더 이상 유효하지 않습니다.

모든 링크를 업데이트 할 책임이 있다는 점을 제외하고는 문제가 비슷합니다 ...

Douglas Leeder가 언급 한 것처럼 영어와 다른 언어를 사용하는 인터페이스는 매우 혼란 스럽지만 (약간 재미 있지만) 영어를 기본 (백업) 언어로 사용하는 것입니다.

위의 고려 사항 외에도 "키"(MSGID)가 소스 텍스트 (영어)와 다르기를 원하는 경우가 많이 있습니다. 예를 들어, HTML보기에서, 해당 앵커 태그의 대상과 레이블이 사용자의 로케일에 의존하는 [yyyy]라고 말할 수 있습니다. 예를 들어 소셜 네트워크에 대한 링크 일 수도 있고 우리에게는 페이스 북이지만 중국에서는 Weibo 일 것입니다. 따라서 msgids는 SocialSiteurl 및 SocialSitelabel과 같은 것일 수 있습니다.

나는 믹스를 사용한다.

충돌/변화/이상한 의미를 가질 것이라고 생각하지 않는 기본 문자열의 경우, 열쇠를 영어와 동일하게 만들 것입니다.

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