2017-11-21 2 views
-1

언어 환경 설정이있는 웹 사이트가 있습니다. 언어를 변경하기 위해 버튼을 클릭하면 모든 것이 정상적으로 작동합니다. 유일한 문제는 언어를 변경할 때마다 사용자가 다시 홈페이지로 돌아가서 http://localhost/en/ 입니다. 그러나 http://localhost/en/work 또는 http://localhost/en/work/#integrations 페이지가 있습니다. 언어를 전환 할 때 동일한 페이지에 머무르는 방법을 알아낼 수 없습니다. 나는 그것이 쪼개지고 바꾸는 것과 관련이 있다고 생각하지만 확실하지 않습니다. 이것은 내가 지금까지 가지고있는 것이다.if/else 문을 사용하여 window.location.href를 다시 만듭니다.

하단의 큰 if 문은 실패한 시도입니다 (여기에서는 매우 새로운 것입니다). 어떤 제안? 그것을 할 수있는 방법의

languageOptions = ['en', 'zh-cn', 'zh-hk', 'jp-jp', 'ko-kr', 'th-th']; 
languageDictionary = { 
    'en': 'en', 
    'en-gb': 'en', 
    'en-us': 'en', 
    'zh-cn': 'zh-cn', 
} 


function checkLanguage() { 
    let lang = localStorage.getItem('lang'); 
    if (!lang) { 
     lang = navigator.language.toLocaleLowerCase(); 
    } 
    if (lang) { 
     let userLang = languageDictionary[lang]; 

     let urlLang = window.location.pathname.split('/')[1]; 

     if (languageOptions.indexOf(urlLang) !== -1 && urlLang !== userLang) { 
      changeLanguage(userLang); 
     } 
    } 
}; 

checkLanguage(); 


function changeLanguage(lang) { 
    if (languageOptions.indexOf(lang) === -1) { 
     return; 
    } 
    localStorage.setItem('lang', lang); 
    window.location.href = '/' + lang; 
} 

if (window.location.hash) { 
    window.location.split('/')[1]; 
    window.location.replace[1](lang); 
    window.location.href = '/' + lang + hash; 
} 
+0

를 "http://localhost/newLang/work/#integrations '를 반환

window.location.href = urlLang.join("/"); 

서버 측 문제 – charlietfl

+0

'window.location.href ='/ '+ LANG 같은데,'changeLanguage'()에서 '/ 갱신 기존 apending되지 않습니다 URL, 단지'/ en' (또는 어느 언어 든)이되도록 겹쳐 쓰고 있습니다. – nnnnnn

답변

-1

의 많은,하지만 한 가지 방법은, 갱신을 분할하고, 당신은 등 정규 표현식, 문자열,

-1

와 함께 할 수

var parts = window.location.href.split("/") 
parts[3] = "foo" 
window.location.href = parts.join("/") 

에 가입되어 @ epascarello가 맞습니다. 분할 및 결합을 사용하여 필요한 것을 할 수 있습니다.

다음은 사용자가 겪고있는 문제입니다.

이렇게하고 있습니다.

let urlLang = window.location.pathname.split('/')[1]; 

URL 부품의 배열을 반환합니다. 'http://localhost/en/work/#integrations'을 사용할 위치에 있으면 반환합니다.

["http:", "", "localhost", "en", "work", "#integrations"] 

원하는 사항은 무엇입니까?

let urlLang = window.location.pathname.split('/'); 

그런 다음 새 lang을 할당하십시오.

urlLang[3] = 'newLang'; 

다음 URL에 사용하십시오.

+0

** url 부분의 배열을 반환합니다. "* - 나는 그렇게 생각하지 않으며, 그 행의 끝에는 [1]이 없다. – nnnnnn

관련 문제