앞선 글(https://xetown.com/square/354440)에서 '다국어 지원이 되지 않는 단일/다중선택 형식의 확장변수 기본값 문제'를 언급한 바 있습니다.

따옴표 안의 말이 복잡하고 참 길죠? 그만큼 실제 문제도 복잡합니다;;;

 

어쨌든 (다국어 지원이 되는) 카테고리 지정을 우회함으로써, 게시판 목록에서 게시물의 확장변수 값을 다국어로 구현하는 데 성공했습니다.

과정이 좀 복잡하긴 합니다.

XEedition 게시판 스킨 기준입니다.

 

 

1. 다행이라면 다행일 텐데. _header.html에 다음과 같은 변수 정의가 있어서 수고를 좀 덜었습니다.

{@ $cate_list = array(); $current_key = null; }
<!--@foreach($category_list as $key=>$val)-->
  <!--@if(!$val->depth)-->
    {@
      $cate_list[$key] = $val;
      $cate_list[$key]->children = array();
      $current_key = $key;
    }
  <!--@elseif($current_key)-->
    {@ $cate_list[$current_key]->children[] = $val }
  <!--@end-->
<!--@end-->

카테고리 목록을 계층화해주는 것 같습니다. 이렇게 하면 카테고리 군과 확장변수를 매칭시키기가 한층 수월해집니다.

 

 

2. 다음으로 게시판 설정의 '분류 관리'로 들어가서 계층화된 카테고리를 만들어줍니다. 물론 다음과 같이 다국어로요.

00.png  01.png

번역이나 맞춤법이 잘 됐는지는 신경쓰지 말아주세요ㅠㅠ 저는 여기서 '형식(Type)'은 일반적인 카테고리 변수로 활용할 것이고, '주제(Theme)'는 확장변수와 매칭시킬 더미 변수로 활용할 것입니다.

 

 

3. 위의 '주제(Theme)' 분류에 맞출 확장변수도 설정해줍니다. 똑같이요.

02.png

앞선 글에서도 썼지만, '기본값(Default Value)'는 다국어 지원을 하지 않는다는 걸 재확인할 수 있습니다.

덧붙여, 향후의 귀찮은 공백 제거 작업을 방지하기 위해 기본값과 쉼표 사이에 띄어쓰기는 하지 않도록 합니다.

 

 

4. 이제 게시판 스킨의 목록 파일로 돌아가보겠습니다.

{$category_list[$document->get('category_srl')]->title}로 하면 해당 글의 카테고리 제목이 출력됩니다. 이 부분은 크게 어렵지 않으니 패스하겠습니다.

다음으로, 위에서 theme이라는 변수명으로 설정했던 확장변수의 변수값을 불러옵니다. 보통은 {$document->getExtraValue(1)}으로 불러오죠. 하지만 이렇게 하면 당연히 다국어 출력이 되지 않습니다. 요렇게 말입니다.

03.png

따라서, 애초 계획대로 확장변수의 기본값을 카테고리 변수값으로 매칭시켜주는 절차를 밟아보도록 하겠습니다.

 

 

5. 일단 다음과 같이 두 가지 변수를 준비해보겠습니다. 하나는 eval이고 다른 하나는 cval입니다.

결코 욕이 아닙니다. eval은 확장변수의 약자이고, cval은 카테고리변수의 약자일 뿐입니다.

{@ $eval = explode(',',$document->getExtraVars()[1]->default); }
<block loop="$cate_list[array_keys($cate_list)[1]]->children=>$key,$val">
  {@ $cval[$key] = $cate_list[array_keys($cate_list)[1]]->children[$key]->title; }
</block>

$eval은 쉼표 단위로 구분되어 있는 확장변수의 기본값을 배열 변수로 만들어준 것입니다. 비교적 간단하죠. 여기서 [1]은 사용자 정의에서 설정돼 있던 확장변수의 일련번호를 가리킵니다.

$cval은 _header.html에서 만들어졌던 1차 카테고리 목록($cate_list) 중 두 번째 키값을 추출해내고(array_keys($cate_list)[1]), 이것을 이용해 '주제(Theme)' 카테고리의 하위 카테고리들을 루프로 돌려줘서 얻은 결과입니다. 그리고 $key 값에 따라서 하위 카테고리의 제목을 입력시켜서 배열변수로 만들어줬습니다.

 

 

6. {print_r($eval)}과 {print_r($cval)}로 확인해보면 다음과 같은 결과가 나옵니다. 일단 한국어 모드입니다. 위쪽이 $eval이고 아래쪽이 $cval이에요.

04.png

성공적이네요. 두 변수가 동일한 결과를 보여주죠? 하지만 $eval과 $cval이 언제나 동일하지만은 않습니다. 이번엔 영어 모드에서 print_r로 출력해보도록 하겠습니다.

05.png

보시는 바와 같이 우리의 $cval(아래쪽)은 언어 모드에 따라 다른 값을 뿌려줍니다. 즉, 한국어 모드에선 두 변수가 동일하고 영어 모드에선 서로 다릅니다. $cval은 다국어 지원 기능이 있는 카테고리 변수로부터 얻어왔기 때문이에요.

 

 

7. 이로써 긴~ 준비가 끝났습니다. 그러면 아까 4번 항목에서 {$document->getExtraValue(1)}로 다국어 출력에 실패했던 문제를 해결해보겠습니다.

{$cval[array_search($document->getExtraValue(1),$eval)]}

끝입니다... 엥? ㅋㅋㅋ

array_search는 $document->getExtraValue(1)로 배열 변수 $eval을 검색해서 성공시에 해당하는 키를 반환시켜줍니다. 즉 $eval과 $cval의 배열이 매칭하는 점에 착안한 겁니다.

예컨대, {$document->getExtraValue(1)}이 어느 언어 모드에서든 '그 외'로 출력되는 데 그쳤다면, 위의 구문은 '그 외'에 해당하는 키값을 [4]로 매칭되는 $cval을 뿌려주게 됩니다.

그 결과, 위의 4번 항목에서 한국어로 잘못 출력됐던 부분도 다음과 같이 잘 나오게 됩니다.

06.png

 

 

... 이상입니다. 이로써 다국어 지원 블로그가 완성의 길로 가는 것일까요?

사실, 아직 모르겠습니다. 이 글을 사용팁이 아니라 자유 게시판에 쓰는 이유도 이 때문입니다.

_read.html과 _write_document.html에서도 확장변수 부분을 제어해줘야 하는 건 물론이고, 무엇보다도 영어모드에선 게시판 검색이 안 된다는 가장 큰 난관이 기다리고 있기 때문입니다.

다국어 기능을 시험해보신 분들은 아시겠지만, 확장변수로 게시판 검색을 할 때는 오로지 한국어로만 됩니다;;;;

 

여러모로 노력을 다하곤 있지만 검색 문제를 해결할 수 있을지는 자신이 1도 없습니다ㅠ 저는 이런 식으로 다국어 지원 블로그 제작에 성공할 수 있을까요? 아니면 기능 제한을 운명으로 받아들이고 이쯤에서 멈춰야 하는 걸까요?

 

벌써 새벽 5시반이네요. 이만 자야겠습니다.

 

 

※ 첨가: 이 글은 게시판 목록에서 활용되는 사례이며, 게시판 본문에서는 다음의 글을 참조해주세요. https://xetown.com/lakepark/359530

윤삼

profile
아무래도 중급 초반 수준의 코딩 오타쿠인 것 같습니다.
  • profile
    우와... 제가 원하던 거네요.. 이런 사소한 부분에서 XE는 아쉬움이 남더라구요...

    고생하셨습니다.
  • profile profile

    혹시 필요하긴 분이 계실까 해서 정리해봤는데, 다행이네요.
    XE만큼 다국어 지원이 잘 되는 CMS도 드물다고 하던데, 결정적인 순간에 뭔가 턱 막히는 느낌이 들더라구요.
    그러나 저러나 검색 문제는 참, 에효...

  • ?
    XE에서 공식적으로 지원하는 방식으로 고친다면 다국어 지원하는 건 크게 어렵지 않을 것 같네요.
    근데 어떤식으로든지 완벽한 다국어 검색은 어려울 거에요. 가능하다고 해도 깔끔하게 구현이 안 될 듯 하네요.
  • ? profile

    구글링으로 이런 문서를 발견했어요. https://xe1.xpressengine.com/forum/22576332

    통합검색 부분에서 성공 케이스가 있었네요, 오호...

    아마도 GG님이 작성하셨던 것 같은데, GG님을 멘션하고 싶은 욕망을 마구 억누르고 있습니다ㅋㅋㅋ

     

    심플코드님 말씀처럼 XE의 공식 지원이 가장 깔끔하겠죠.

    하지만 이래저래 탐문해보니 다국어 검색 수요가 상대적으로 적은 편이어서 XE측에선 동기부여가 별로 없는 눈치더라구요.

    라이믹스는? 이라는 생각이 들긴 했지만, 이쪽으론 제가 문외한이다보니 적절한 이슈인지 감도 잘 안 잡히구요.

     

    아무튼 하다가 안 되면 포기해야죠, 뭐

    어차피 그냥 취미로 목숨 걸고 하는 일이니까요ㅋㅋㅋㅋ (미춰버리겠네~)

  • profile profile
    아 제가 이런 코멘트도 했었네요. 부끄.
  • ?
    대단대단 ..
  • ? profile
    아마 실패할 것 같아요ㅋㅋㅋㅋ
  • profile ?
    컴퓨터 프로그램만드는거에 비해서 웹은 콩알만치도 몰라서 버그하나에 몇시간을 낑낑대는중이네요 ..
  • ? profile
    프로그램을 하시면 웹사이트 개발도 금방 잘 하시지 않을까요? 저는 문과 주제에 야매로 익히고 있다보니 실력이 안 늘어요ㅠㅠ
  • profile ?
    제가 C , C++ 같은거 먼저 배운게 아니라서 ... 컴퓨터 프로그램 만든거라고해봐야
    엠넷플레이어랑 같은 음악플레이어나 어플 유틸프로그램밖에 안만들어서 ..
  • ? profile

    저는 그 두 개가 얼마나 다른지도 모르는 걸요. ㅎㅎ
    (웹툰 위젯 스킨 수정도 분명 잘 될 겁니다!)