2009-12-18 2 views
1
<?LANG(no_download, 'you are not allowed to download') 
대신
$lang[no_download] 

필자는 템플릿에 언어 문자열을 포함시키는 것이 더 나은 방법이라고 생각합니다.더 많은 설명적인 언어 문자열 자리 표시 자?

거의 모든 PHP 응용 프로그램에서 언어 자리 표시 자의 주요 형식은 <?=$lang['no_download']?> 또는 {{no_download}}와 같습니다. 다른 디자이너/개발자/번역자는 언어 파일을 참조하지 않고 자리 표시자가 나타내는 것을 해독하는 데 어려움을 겪습니다.

언어 자리 표시자를보다 설명하기 쉽게하기 위해 원래 문자열을 자리 표시 자와 함께 포함시켜야하는 이유는 무엇입니까? 예 : .

<?=lang('no_download' , 'You are not allowed to download this file because you have exceeded your quota')?> 

두 번째 매개 변수는 더미이므로 lang() 함수로 아무 것도 수행되지 않습니다.

한 눈에 너무 지나치게 길어서 템플릿 마크 업에 혼란을 일으킬 수 있습니다. 하지만 내 의견으로는 언어를 인식하지 못하면 언어 문자열이 자리 표시 자만큼 많은 공간을 차지 했으므로 유효한 인수가 아닙니다.

이에 관한 의견을 듣고 싶습니다.

답변

1

편집본 태그가 없습니다. Smarty. Smarty 특정 답변을 원하면 내 대답을 무시하십시오.

이 우세한 자리 표시 자 형식 인 것에 동의하지 않습니다. 일반적으로 형식은 번역을 처리하는 방법에 따라 달라질 수 있습니다.

그 외에도 기본 언어 문자열을 번역 레이블로 제공하는 것이 일반적입니다. 예를 들어, Zend Framework 매뉴얼에서 이것은 usage example의 일부입니다. 번역 어댑터에서 지원하는 경우에는 아무런 문제가 없습니다. ID가 필요한 경우 옵션이 아닙니다.

개인적으로 ID를 선호하며 응용 프로그램에서의 사용법에 따라 이름을 지정하려고합니다. form.label.login.username 또는 cart.checkout 또는 flashmessage.notice.

ID를 사용하면 또 다른 분리 층이 제공됩니다. 문자 메시지가 개발자 또는 템플리트 디자이너의 책임이 아닐 수도 있으므로 템플리트에 ID를 갖는 것이 좋습니다.

1

내 의견으로는, 귀하의 항목에 대한 훌륭한 "열쇠"설정에 대해 생각하는 것이 현명합니다 ... 동사가 없기 때문에 "no_download"키가 메시지를 잘 설명하지 못합니다.

키는 변수 및 함수뿐 아니라 올바른 명명 규칙을 따라야합니다.

{{user_quota_exeeded}} 

또는 장기적으로

{{user_quota_exeeded_alert}} 

, 당신의 "진짜 문자열"템플릿 변경하고 "더미 변수"도착하는 경우는 '아무튼 :

키는 예를 들어 있어야한다 t, 그것은 동료/고객 중 일부를 속일 것입니다. ...

또한 메시지를 두 번 입력해야합니다.

이름 지정 규칙에 대한 추가 정보는 wikipedia입니다.

0

Gettext 이미 수행합니다. 그것은 다음과 같습니다 :

_('Gettext does this already. It goes something like this:'); 
0

이들은 모두 훌륭한 답변, 훌륭한 통찰력이었습니다.

아르노, 나는 명명 규칙을 잘 알고 있습니다. 예제 언어 키는 실제로 적절하게 명명되지 않았지만 예제로만 제공되었습니다. 웹 응용 프로그램의 번역 과정에서 몇 문자열로 요약/설명하기 어려운 문자열을 발견하여 기본 언어 문자열을 번역 레이블로 포함 할 것을 고려했습니다. 나는 번역 작업을 충분히 해왔다면이 시나리오를 보게 될 것이다.

어쨌든 Zend & Gettext가 이미이 접근법을 채택한 것을 안심하시기 바랍니다.

내 머리 속으로 튀어 나온 또 다른 질문은 성능 저하입니다.

함수 호출을 사용합니다. LANG()은 단순히 $ lang 배열을 인쇄하는 것보다 훨씬 많은 자원을 사용합니까?

dya가 생각하는 것?