1번째사이트는 번역이 잘되고 2번째사이트부터는 사이트번역 안되는데 뭐가문제인가요?

🙏SIR UI/UX 디자인 의뢰(~7/31)
1번째사이트는 번역이 잘되고 2번째사이트부터는 사이트번역 안되는데 뭐가문제인가요?

QA

1번째사이트는 번역이 잘되고 2번째사이트부터는 사이트번역 안되는데 뭐가문제인가요?

본문

사이트를 복사해서 테스트를 해보는데 똑같은코드인데 2번째사이트부터는 번역이 안되는데 이유가뭘까요?
 


<!-- 구글 웹사이트 번역 플러그인 [s] -->
<style type="text/css">
    #goog-gt-tt {
        display: none !important;
    }
    .goog-te-banner-frame {
        display: none !important;
    }
    .goog-te-menu-value:hover {
        text-decoration: none !important;
    }
    .goog-te-gadget-icon {
        background-image: url(//gtranslate.net/flags/gt_logo_19x19.gif) !important;
        background-position: 0 0 !important;
    }
    body {
        top: 0 !important;
    }
    a.gflag {
        vertical-align: middle;
        font-size: 15px;
        padding: 0px;
        background-repeat: no-repeat;
        background-image: url(https://www.drupal.org/files/issues/2018-06-04/16.png);
    }
    a.gflag img {
        border: 0;
    }
    a.gflag:hover {
        background-image: url(https://www.drupal.org/files/issues/2018-06-04/16a.png);
    }
    #google_translate_element_site2 {
        display: none !important;
    }
    .skiptranslate {
        display: none;
    }
</style>
 
<div id="google_translate_element_site2"></div>
 
<a href="#" onclick="toggleLanguage();return false;" title="언어 전환" class="gflag nturl" style="background-position:-0px -200px;">
    <img src="//gtranslate.net/flags/blank.png" height="16" width="16" alt="언어 전환"/>
</a>
 
<script type="text/javascript">
function loadGoogleTranslateScript(callback) {
    if (!document.querySelector('script[src*="translate.google.com/translate_a/element.js"]')) {
        const script = document.createElement('script');
        script.src = 'https://translate.google.com/translate_a/element.js?cb=googleTranslateElementInit2';
        script.async = true;
        script.onload = () => {
            console.log("Site 2: Google Translate 스크립트 로드 성공");
            if (typeof callback === 'function') callback();
        };
        script.onerror = () => {
            console.error("Site 2: Google Translate 스크립트 로드 실패. 네트워크 상태 확인 필요.");
        };
        document.head.appendChild(script);
    } else {
        if (typeof googleTranslateElementInit2 === 'function') googleTranslateElementInit2();
        if (typeof callback === 'function') callback();
    }
}
 
function googleTranslateElementInit2() {
    if (typeof google === 'undefined' || !google.translate) {
        console.error("Site 2: Google Translate 라이브러리가 로드되지 않음. 네트워크 또는 CORS 문제 확인.");
        return;
    }
 
    new google.translate.TranslateElement({
        pageLanguage: 'ja',
        autoDisplay: false
    }, 'google_translate_element_site2');
 
    // 페이지 로드 시 일본어 -> 한국어로 자동 번역
    function setKoreanTranslation() {
        document.cookie = 'googtrans=/ja/ko; path=/0303; max-age=31536000';
        const translateElement = document.querySelector('.goog-te-combo');
        if (translateElement) {
            translateElement.value = 'ko';
            GTranslateFireEvent(translateElement, 'change');
            console.log("Site 2: 일본어 -> 한국어 번역 완료 (자동)");
        } else {
            console.error("Site 2: Google Translate 요소를 찾을 수 없습니다.");
        }
    }
 
    // Google Translate iframe 준비 확인
    function waitForTranslateFrame(callback) {
        let tries = 0;
        const checkInterval = setInterval(() => {
            const frame = document.querySelector('.goog-te-menu-frame');
            if (frame || tries > 20) {
                clearInterval(checkInterval);
                if (frame) {
                    console.log("Site 2: Google Translate frame 준비 완료");
                    callback();
                } else {
                    console.error("Site 2: Google Translate frame을 찾을 수 없습니다.");
                }
            }
            tries++;
        }, 200);
    }
 
    waitForTranslateFrame(setKoreanTranslation);
}
 
// 언어 전환 기능 (전역으로 정의)
window.toggleLanguage = function() {
    if (typeof doGTranslate !== 'function') {
        console.error("Site 2: doGTranslate 함수가 정의되지 않음. 스크립트 로드 실패.");
        return false;
    }
 
    let clickCount = (window.toggleLanguageClickCount || 0) + 1;
    window.toggleLanguageClickCount = clickCount;
    let langPair = '';
 
    switch (clickCount % 3) {
        case 1: langPair = 'ja|en'; break;
        case 2: langPair = 'en|ja'; break;
        case 0: langPair = 'ja|ko'; break;
    }
 
    function executeTranslation() {
        waitForTranslateFrame(() => {
            doGTranslate(langPair);
            console.log("Site 2: 번역 실행: " + langPair);
        });
    }
 
    if (document.querySelector('.goog-te-menu-frame')) {
        executeTranslation();
    } else {
        waitForTranslateFrame(executeTranslation);
    }
    return false;
};
 
// GTranslateFireEvent 함수 (기존 코드 유지)
eval(function (p, a, c, k, e, r) {
    e = function (c) {
        return (c < a ? '' : e(parseInt(c / a))) + ((c = c % a) > 35 ? String.fromCharCode(c + 29) : c.toString(36))
    };
    if (!''.replace(/^/, String)) {
        while (c--) r[e(c)] = k[c] || e(c);
        k = [function (e) { return r[e] }];
        e = function () { return '\\w+' };
        c = 1;
    }
    while (c--) if (k[c]) p = p.replace(new RegExp('\\b' + e(c) + '\\b', 'g'), k[c]);
    return p
}('6 7(a,b){n{4(2.9){3 c=2.9("o");c.p(b,f,f);a.q(c)}g{3 c=2.r();a.s(\'t\'+b,c)}}u(e){}}6 h(a){4(a.8)a=a.8;4(a==\'\')v;3 b=a.w(\'|\')[1];3 c;3 d=2.x(\'y\');z(3 i=0;i<d.5;i++)4(d[i].A==\'B-C-D\')c=d[i];4(2.j(\'k\')==E||2.j(\'k\').l.5==0||c.5==0||c.l.5==0){F(6(){h(a)},G)}g{c.8=b;7(c,\'m\');7(c,\'m\')}}', 43, 43, '||document|var|if|length|function|GTranslateFireEvent|value|createEvent||||||true|else|doGTranslate||getElementById|google_translate_element2|innerHTML|change|try|HTMLEvents|initEvent|dispatchEvent|createEventObject|fireEvent|on|catch|return|split|getElementsByTagName|select|for|className|goog|te|combo|null|setTimeout|500'.split('|'), 0, {}));
 
// 페이지 로드 시 스크립트 로드 시작
window.onload = function() {
    loadGoogleTranslateScript();
};
</script>
<!-- 구글 웹사이트 번역 플러그인 [e] -->

이 질문에 댓글 쓰기 :

답변 1

번역 쿠키의 경로 설정이 복사된 사이트의 실제 경로와 일치하지 않다고 합니다.
해당 쿠키의 'path' 값을 '/' 또는 사이트에 적절한 경로로 수정하셔야겠습니다.

document.cookie = 'googtrans=/ja/ko; path=/0303; max-age=31536000';

스크립트의 위 코드를[code]

document.cookie = 'googtrans=/ja/ko; path=/; max-age=31536000';

[/code]이와 같이 변경하여, 쿠키가 사이트의 루트 경로에 적용되도록 수정

네, 맞습니다. 쿠키의 'path' 값은 사이트 내에서 쿠키가 유효한 URL 경로를 지정하는 것이므로,
운영 중인 사이트의 실제 경로로 설정해야 정상적으로 작동합니다.
예를 들어, 사이트의 루트 경로에서 전체적으로 적용하려면 'path=/'로 설정하고,
특정 하위 디렉토리에서만 사용한신다면 그 경로로 지정하는 것이 좋습니다.

답변을 작성하시기 전에 로그인 해주세요.
전체 38
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT