Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

템플릿에서 상대적인 언어코드 지원 #2203

Closed
conory opened this issue Oct 30, 2023 · 6 comments
Closed

템플릿에서 상대적인 언어코드 지원 #2203

conory opened this issue Oct 30, 2023 · 6 comments
Labels
improvement 기능 개선 요청 또는 기능 개선 PR

Comments

@conory
Copy link
Member

conory commented Oct 30, 2023

저의 경우, 모듈 제작시 lang('msg_abc') 지양하고, 대신 모듈 이름을 명시하는 lang('conory.msg_abc')를 사용하고 있습니다. 왜냐하면 다른 서드파티와의 충돌 가능성 때문입니다. 전자의 경우, 같은 언어코드를 다른 서드파티에서도 사용하고 있다면 경우에 따라 덧씌워질 수 있습니다.

즉, lang('conory.msg_abc')를 더 많이 사용합니다.
하지만 모듈 이름이 길다면 lang('conory_long_long_long.msg_abc') 좀 불편합니다.

아래와 같이 제안합니다.

@lang('conory_long_long_long.msg_abc')
= @lang('.msg_abc')

템플릿에서 언어코드 맨 앞에 점이 있으면, 템플릿 경로에서 서드파티 이름을 찾고, 자동으로 붙여줍니다.

@kijin
Copy link
Member

kijin commented Oct 30, 2023

좋은 제안입니다만, 서드파티 자료 이름을 찾는 것이 의외로 복잡할 수도 있습니다. 일반적인 모듈이라면 그나마 쉽지만, 스킨에 lang 폴더를 넣는 경우도 봤거든요. 일단 경로가 (modules|addons|(m\.)?layouts|widgets)/<자료명>/...으로 완벽하게 매칭되는 경우에만 지원하고, 그 밖의 경우는 차차 생각해 볼까요?

점으로 시작하는 것이 가장 짧긴 하지만, CSS나 jQuery에서 클래스를 뜻하는 문법과 너무 비슷해 보인다는 점이 다소 걸립니다. 처음 접하는 분들은 상당히 헷갈릴 것 같아요. 짧으면서도 "이 모듈(애드온, 위젯 등)"이라는 의미가 좀더 명확하게 전달되도록 할 수 있을까요? 예를 들면 self라고 한다거나...

거꾸로 생각하는 방법도 있습니다. 새로운 문법인 만큼, 템플릿 v2에서 @lang을 사용할 때는 반드시 모듈명을 붙여서 사용해야 하고, 그렇지 않으면 그 모듈에서 선언한 언어코드라고 간주하는 것을 디폴트로 둔다거나...

P.S. Blade 스타일의 문법은 사실상 PHP 함수를 호출하는 것이므로, 아래와 같은 꼼수도 통하긴 할 거예요.

@lang($module_info->module . '.msg_abc')

@kijin kijin added the improvement 기능 개선 요청 또는 기능 개선 PR label Oct 30, 2023
@conory
Copy link
Member Author

conory commented Oct 30, 2023

네, 아니면 선택사항으로 "템플릿에서 사용할 변수" 처럼 "템플릿에서 사용할 언어파일"을 따로 지정한 경우("컨트롤러에서 지정" 또는 "템플릿 내, 맨 위에서 사용할 언어 파일을 선언")에 한하여 지원해도 괜찮구요.

가능하다면, 앞에 "점"조차 없는 게 제일 깔끔하긴 합니다.

@kijin
Copy link
Member

kijin commented Oct 30, 2023

템플릿 파일 이외의 장소에서 설정한 것이 템플릿 문법의 해석에 영향을 준다면 곤란합니다.

점 없이 해당 모듈의 언어코드를 우선 검색하는 방법이 끌리는군요. 안 그래도 Lang 클래스에서는 일정한 순서로 각 모듈의 언어코드를 검색하도록 되어 있으니, 특정한 상황에서 특정 모듈의 우선순위를 높이는 것은 어렵지 않습니다. 해당 모듈에서 선언하지 않은 언어코드는 정상적인 순서로 fallback하고요. 단, 이렇게 하면 어디에서 lang()을 호출했는지에 따라 서로 다른 언어코드를 로딩하게 될 수도 있다는 단점이 있습니다.

@conory
Copy link
Member Author

conory commented Oct 30, 2023

흠... 서드파티 이름이 명시되지 않은 lang('msg_abc')의 단점이 남아있는 것 같습니다. 예를 들어, 의도는 $lang->comment = '주석'; 인데, 언어코드를 실수로 추가하지 않았거나 의도치않게 삭제된 상황에서 언어코드가 그대로 출력되는 것이 아니라 "댓글"로 표시된다면, 그 원인이나 번역 오류(특히 제 3언어)를 알아채기 쉽지 않을 것 같습니다.

@kijin
Copy link
Member

kijin commented Oct 30, 2023

네, 점 없이 언어코드를 사용하면 어떤 자료들이 어떤 순서로 로딩되어 있는지에 따라 결과가 달라질 수 있습니다. 물론 코어의 common/lang이나 주요 모듈들이 사용하는 것으로 널리 알려진 간단한 단어를 의도적으로 덮어쓰는 것을 추천하지는 않지만요.

그렇다면 this, self 등 "이 자료"라는 의미를 전달할 수 있으면서 실제 자료명으로 사용할 수 없는 짧은 단어로 대체하는 방법이 가장 안전할 것 같습니다. 의미가 가장 분명하고 버그 발생 가능성이 적은 문법이 대체로 가장 짧은 문법은 아니지요.

@conory
Copy link
Member Author

conory commented Oct 30, 2023

네, 그게 최선일 것 같습니다.

@kijin kijin closed this as completed in e72336c Nov 6, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
improvement 기능 개선 요청 또는 기능 개선 PR
Projects
None yet
Development

No branches or pull requests

2 participants