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]이와 같이 변경하여, 쿠키가 사이트의 루트 경로에 적용되도록 수정
답변을 작성하시기 전에 로그인 해주세요.