42 lines
1.2 KiB
TypeScript
42 lines
1.2 KiB
TypeScript
export const usePathResolver = () => {
|
|
const getPathAfterLanguage = (url?: string): string => {
|
|
// URL이 제공되지 않으면 현재 URL 사용
|
|
const targetUrl =
|
|
url || (import.meta.client ? window.location.pathname : '')
|
|
|
|
// URL에서 언어 코드 패턴을 찾아서 그 뒤의 경로를 추출
|
|
// 예: /ko/about/story -> /about/story
|
|
// 예: /en/test/page -> /test/page
|
|
// 예: /zh-tw/about/story -> /about/story
|
|
// 예: /zh-cn/test/page -> /test/page
|
|
// 예: /ko -> "" (빈 문자열)
|
|
const languagePattern = /^\/[a-z]{2}(-[a-z]{2})?\/(.+)$/
|
|
const match = targetUrl.match(languagePattern)
|
|
|
|
if (match && match[2]) {
|
|
return `/${match[2]}`
|
|
}
|
|
|
|
// 언어 코드만 있고 뒤에 아무것도 없는 경우 (예: /ko, /en, /zh-tw, /zh-cn)
|
|
const languageOnlyPattern = /^\/[a-z]{2}(-[a-z]{2})?$/
|
|
if (languageOnlyPattern.test(targetUrl)) {
|
|
return ''
|
|
}
|
|
|
|
// 언어 코드가 없는 경우 원본 경로 그대로 반환 (이미 /로 시작)
|
|
return targetUrl
|
|
}
|
|
|
|
const getCurrentPath = (): string => {
|
|
if (import.meta.client) {
|
|
return getPathAfterLanguage()
|
|
}
|
|
return ''
|
|
}
|
|
|
|
return {
|
|
getPathAfterLanguage,
|
|
getCurrentPath,
|
|
}
|
|
}
|