다국어 기능 js 설정

Extra Form
PHP PHP 7.3
CMS Rhymix 2.x

다국어 세팅을 시작했습니다. 지난 번 질문에 대한 답변을 통해 많은 부분 의뢰없이 직접 수정할 수 있게 되었습니다.

 

오늘의 질문입니다.

html 에서는 예를들어, {$lang->card_list_hide} 이렇게 입력하면 잘 적용되는데

 

js 화일에서는 적용이되지 않습니다.

 

if(content.is(':visible')){

        content.hide();

        jQuery(obj).html('보이기');

    }else{

        content.show();

        jQuery(obj).html('감추기');

    }

 

이런 구문인데 

보이기 를 {$lang->card_list_hide} 로 대치하면 문자열 그대로 출력해버립니다. 어떻게 해결하는 것이 가장 좋을까요?

 

 

  • profile

    js 파일에서는 어떤 템플릿 문법도 변환되지 않습니다.

     

    그래서 html 파일에 자바스크립트까지 다 입력해 놓고 지저분하게 운영하시는 분들이 있는데,

    정석대로라면 html 파일에서는 템플릿 문법을 활용하여 변수만 선언하고

        <script> var card_list_hide = {$lang->card_list_hide|json}; </script>

    js 파일에서 이 변수를 사용하는 것이 좋습니다.

        jQuery(obj).html(card_list_hide);

     

    {$변수|json} 문법은 JS에서 문제를 일으킬 수 있는 특수문자를 자동으로 인코딩하고 앞뒤에 따옴표까지 자동으로 붙여 줍니다. 따라서 앞뒤에 따옴표를 붙이거나 별도로 escape할 필요가 없습니다. 심지어 여러 개의 데이터를 배열에 담아 한꺼번에 선언할 수도 있으므로, 이런 상황에서 사용하기 딱 좋습니다.

  • profile profile
    이렇게 빨리 답변을 해주실 줄이야.. 정말 감사합니다. 말씀해주신대로 해보겠습니다!
  • profile profile
    저는 php에서 만든 배열값을 다양한 스크립트에서 사용하려고 json_encode() 를 사용한 적이 있는데 {$변수|json} 이게 라이믹스에서 같은 문법이 되는거군요. 다음에는 이걸 써야 겠네요.
  • profile profile
    네, {json_encode($변수)}와 같은 의미입니다.

    그 밖에도 다양한 필터가 있으니 필요에 따라 활용하시면 편리합니다.
    https://github.com/rhymix/rhymix/pull/727
  • profile

    js 파일은 템플릿과 전혀 상관 없는 곳이라고 생각하면 편합니다..

    불가피한 경우는 스크립트를 모두 html 템플릿에 포함하여 회피할 수 있지만
    js 파일을 이용해야 하는 경우 사용고자 하는 값을 html에서 전역변수? 성격으로 선언한 다음 필요한 곳에서 사용하면 됩니다.

    위 기진곰님께서 설명해주신 부분이

    card_list_hide 라는 변수에 원하시는 값을 담는 스크립트만 간단하게 html 템플릿에서 작성하라고 말씀 해주신 부분입니다.

    라이믹스 코어에서도 여러곳에서 쓸수 있도록 php 단에서 스크립트용 변수를 만들어주는 것을 예시로 보시면 됩니다.

    <script>
    var default_url = "https://xetown.com/";
    var current_url = "https://xetown.com/";
    var request_uri = "https://xetown.com/";
    var current_lang = xe.current_lang = "ko";
    var current_mid = "hall";
    var http_port = null;
    var https_port = null;
    var enforce_ssl = true;
    var cookies_ssl = true;
    var rewrite_level = 2;
    if (detectColorScheme) detectColorScheme();
    </script>

    이렇게 만들어 놓으면 어디에서든 가져다 쓸수 있습니다.

  • profile profile
    자세한 설명감사합니다!