코어의 lang을 수정하고 싶은데, 코어 수정은 피하고 싶은 경우 땜빵으로 사용할 수 있는 방법입니다.
아래와 같이 moduleHandler.proc after 트리거를 걸어주고요
<eventHandler after="moduleHandler.proc" class="Controllers\EventHandlers" method="afterModuleProc" />
아래와 같이 컨트롤러에 코드를 넣어주면 됩니다.
아래 예시는 신고목록을 원하는대로 수정하는 예시 코드입니다.
public function afterModuleProc()
{
$oLang = Lang::getInstance('ko');
$declare_list = [
'예시 신고 목록1',
'예시 신고 목록2',
// ...
];
$list = [];
foreach ($declare_list as $reason) {
$list[$reason] = $reason;
}
$list['others'] = '기타(직접작성)';
$oLang->set('improper_document_reasons', $list); // $lang->improper_document_reasons 수정
$oLang->set('improper_comment_reasons', $list);
}
다만 lang이 사용되는 위치에 따라서, 적용이 될때도? 안될때도? 있더라고요.
전역적으로 사용한다면 위 예시를 차용하되, 지엽적으로 사용한다면 호출 전에 명시적으로 넣어주는 것을 권장합니다.
리버스
Lv. 7
모듈만드는 대학생입니다.
https://potatosoft.kr
https://potatosoft.kr
댓글 3
어떤 언어코드라도 커스터마이징할 수 있도록 해 주는 모듈이나 애드온 하나 있으면 편리하겠네요.
(일거리 투척 ㅋㅋㅋ)
다국어 기능을 별도의 모듈로 떼어낼 수도 있겠네요.
다만 저게 프론트 렌더링 과정에서 적용이 되는 것으로 보이는데, 컨트롤러단에서 lang을 활용할 경우 거기선 적용이 안되더라고요.
beforeModuleProc 시점에 반영하면 코드상의 lang에 덮어씌워지는 것으로 보이고요..
단순하게 테스트만 해봐서 정확하진 않을 수 있는데, 그 부분에서 애를 먹었었습니다.
네, 모든 언어코드가 미리 로딩되어 있는 것은 아니기 때문에, 로딩 시점에 따라 덮어씌울 수도 있고 덮어씌워질 수도 있습니다. 대부분은 맨 마지막에 스킨에서 사용하는 언어코드만 신경을 쓰시지만...
어떤 모듈에서 선언한 언어코드보다도 우선 적용되는 사용자 지정 dictionary가 필요하다면, 그런 부분은 코어에서 변경해 드릴 수도 있겠네요.