2012-12-07 7 views

답변

0

오랫동안 같은 문제가 있었지만 실제로는 전혀 할 수 없다고 생각합니다.

# No translation needed/Translated 
msgid "This is a string" 
msgstr "" 

지금까지, 그것은 가장 좋은 해결 방법에 의해되었습니다 : 당신이 방법을 찾는 결국 않으면 /, 게시하시기 바랍니다을 내가 거기에서 "번역"표시 할 수 있도록 내 최선의 선택은 메모를 삽입하는 것이 었습니다!

+0

이것은 Gettext 파일 형식의 큰 디자인 결함 인 것 같습니다. – sorin

4

이것이 gettext 사양의 큰 설계 결함 인 것 같기 때문에이 필드 안에 Unicode Character 'ZERO WIDTH SPACE' (U+200B)을 사용하기로 결정했습니다.

+0

예, 실제로 gettext 사양에 결함이 있습니다. 나는 오랫동안이 특별한 문제에 대한 해답을 찾고 있었다. 너비가 0 인 스페이스가 좋은 해결 방법 인 것 같습니다. 아마도 주석보다 낫습니다 (실제로 빈 문자열의 문제를 해결하지는 못합니다). 팁 고마워 :) – Dyn

2

나는이 오래된 질문 실현,하지만 난 다른 접근 방식을 지적하고 싶었 :

msgid "This is a string" 
msgstr "\0" 

gettext를 문자열의 끝을 임베디드 널 (null)를 사용하고, 제대로 C 이스케이프 시퀀스로 변환하기 때문에, 나는 이것이 작동 할 수도 있고 빈 문자열 변환이 일어날 것이라고 추측 할 것입니다. GNU libintl에 기반한 내 프로그램에서 으로 보이지만 이것이 실제로 시스템에서 표준/허용되는지는 알 수 없습니다. 내가 PO를와 gettext 알고있는 것처럼 소스 코드를보고 이외의 권위있는 대답이 없을 수 있도록 공식적으로 종종 일에 포함 된 null을 넣어 프로그래머 할 수있는 좋은 것은 아니다

https://www.gnu.org/software/gettext/manual/html_node/PO-Files.html

... 지정되지 않은 너의 경우에는 효과가있을 수 있니? 그것은 크기가 0 인 문자열을 실제로 생성하기 때문에 제로 - 폭 - 공간 트릭보다 덜 나쁘다.


편집 : 그것은이없는 가정 문자열의 크기에 대한 혼란스러워한다면, msgfmt을 실행할 때 당신은 segfault의/나쁜 행동을 얻을

기본적으로 일어날 수있는 최악의 일이 내장 된 널 (null) 및 어딘가에 버퍼 오버 플로우.

libintl이 단지는 char * 인 문자열을 반환하는 의미하기 때문에 최종 응용 프로그램은 아무리 널 문자까지 볼 수 있도록, 그것으로 옳은 일을해야 할 것입니다, msgfmt 그래도이 견딜 수 있다고 가정 뭐. 그것은 가치가 무엇인지에 대한

내 포 파서 라이브러리 spirit-po 명시 적으로이 : 지원

https://github.com/cbeck88/spirit-po


편집 : gettext의 문서에서, 그들이 임베디드 널의 가능성을 언급 할 것으로 보인다 MO 파일과 "가 강력하게 논의했다"고 말했다 :

https://www.gnu.org/software/gettext/manual/html_node/MO-Files.html

MO 파일에 문자열에 NUL이 포함되지 않도록하는 것은 없습니다.그러나 현재 사용되는 프로그램 인터페이스는 문자열이 NUL 종료 된 것으로 추정하므로 내장 된 NUL은 다소 쓸모가 없습니다. 그러나 MO 파일 형식은 일반적으로 충분하므로 다른 인터페이스가 나중에 가능합니다. 예를 들어 NUL 바이트가 실수로 나타날 수있는 MO 파일에서 와이드 문자를 구현하려는 경우가 있습니다. (아니요, 우리는 MO 파일에 넓은 문자를 갖고 싶지 않습니다. 파일을 불필요하게 크게 만들 것이고 'wchar_t'유형은 플랫폼에 따라 다르므로 MO 파일도 플랫폼에 따라 달라질 수 있습니다.)

이슈는 GNU gettext 개발 포럼에서 강력하게 논의되어 왔으며, MO 파일 형식은 시간이 지남에 따라 진화하거나 바뀔 것으로 예상됩니다. 나중에 여러 형식을 동시에 지원할 수도 있습니다. 그러나 분명히, 우리는 어딘가에서 시작해야하며 여기에 설명 된 MO 파일 형식은 좋은 시작입니다. 구체적인 것은 캐스트되지 않으며 형식은 나중에 쉽게 진화 할 수 있으므로 현재 접근 방식에 익숙해 져야합니다.

적어도 "메시지 문자열에 Null이 삽입 되었습니까? 우리는 생각하지 않았습니다."라고 말할 것 같지 않습니다. 가장 가능성이 높습니다. msgfmt이 충돌하지 않으면 나는 정성을 다할 것으로 생각합니다.