테스트 사이트 - 개발 중인 베타 버전입니다

다국어 페이지 연결 방법? 채택완료

웹메이킹 2년 전 조회 4,423

안녕하세요

다국어 웹사이트를 제작중입니다.

한국어 메인 경로 /index.php

한국어 페이지 경로 /pages/

 

영어 메인경로 /en/index.php

영어 페이지 경로 /en/pages/

 

이렇게 제작이 완료된 상태입니다. (영어페이지는 자체 번역 페이지, 게시판포함)

 

헤더 부분에 다음과 같이 정의 했습니다.

</p>

<p><?php

$availableLanguages = array(

    'ko_KR' => '한국어',

    'en_US' => '영어',

    // 다른 언어 코드 및 이름 추가

);</p>

<p>if (isset($_GET['locale'])) {

    $selectedLanguage = $_GET['locale'];

} else {

    // 기본 언어 설정

    $selectedLanguage = 'ko_KR';

}</p>

<p>function generateLanguageLink($languageCode) {

    return $_SERVER['PHP_SELF'] . '?locale=' . $languageCode;

}

?></p>

<p> </p>

<p>        <div style="text-align: right;margin-right:30px;"></p>

<p>            <a href="<?php echo generateLanguageLink($code); ?>" style="margin-right: 10px;"><img src="/en/img/ko_KR-ic.jpg" alt="한국어" style="width:34px;height:21px;"> <?php echo $name; ?></a></p>

<p>            <a href="<?php echo generateLanguageLink($code); ?>"><img src="/en/img/en_US-ic.jpg" alt="영어" style="width:27px;height:17px;"> <?php echo $name; ?></a></p>

<p>    <?php endforeach; ?>

</div>

 

이렇게 했는데메인에서 영어 클릭시 메인 전환은 잘됩니다. 영어 페이지에서 한국어 클릭시 한국어 페이지로 전환은 잘되고요

문제는 한국어 페이지 회사소개에서 영어를 클릭하면 영어페이지 ABOUT 으로 전환이 되어야 하는데 영어 메인페이지로 전환됩니다.

 

뭔가 변수 및 정의를 더 해 줘야 할 것 같은데 여러방법으로 수정을 해봐도 계속 메인으로만 전환이됩니다.

어떻게 해야 하는지 고수님 들의 도움 부탁드리겠습니다.

 

즐거운 저녁 되세요.

댓글을 작성하려면 로그인이 필요합니다.

답변 5개

채택된 답변
+20 포인트
웅푸
2년 전

<?php
$availableLanguages = array(
    'ko_KR' => '한국어',
    'en_US' => '영어',
    // 다른 언어 코드 및 이름 추가
);

if (isset($_GET['locale'])) {
    $selectedLanguage = $_GET['locale'];
} else {
    // 기본 언어 설정
    $selectedLanguage = 'ko_KR';
}

function generateLanguageLink($languageCode) {
    return $_SERVER['PHP_SELF'] . '?locale=' . $languageCode;
}
?>

<div style="text-align: right; margin-right: 30px;">
    <?php foreach ($availableLanguages as $code => $name) { ?>
        <a href="<?php echo generateLanguageLink($code); ?>" style="margin-right: 10px;">
            <img src="/en/img/<?php echo $code; ?>-ic.jpg" alt="<?php echo $name; ?>" style="width: 34px; height: 21px;">
            <?php echo $name; ?>
        </a>
    <?php } ?>
</div>

이래 해보시던가 아니면 아래 

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

조언을 해주신 모든 분들께 감사드립니다.

 

최종적으로 웅프님과 들레아빠님의 코드를 조합해서 해결했습니다.

즐거운 주말 되세요~^^

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

들레아빠

</p>

<p><?php

// 사용 가능한 언어와 해당 페이지의 경로 설정

$languages = array(

    'ko_KR' => array('name' => '한국어', 'root' => '', 'pages' => 'pages/'),

    'en_US' => array('name' => '영어', 'root' => 'en/', 'pages' => 'en/pages/'),

    // 다른 언어 및 경로 설정 추가

);</p>

<p>// 현재 선택된 언어를 확인

if (isset($_GET['locale']) && array_key_exists($_GET['locale'], $languages)) {

    $selectedLanguage = $_GET['locale'];

} else {

    // 기본 언어 설정

    $selectedLanguage = 'ko_KR';

}</p>

<p>function generateLanguageLink($languageCode) {

    global $languages;

    $language = $languages[$languageCode];

    return '/' . $language['root'] . '?locale=' . $languageCode;

}

?></p>

<p><div style="text-align: right; margin-right: 30px;">

    <?php foreach ($languages as $code => $details): ?>

        <a href="<?php echo generateLanguageLink($code); ?>" style="margin-right: 10px;">

            <img src="/en/img/<?php echo $code; ?>-ic.jpg" alt="<?php echo $details['name']; ?>" style="width: 34px; height: 21px;">

            <?php echo $details['name']; ?>

        </a>

    <?php endforeach; ?>

</div>

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

s
sinbi Expert
2년 전

그냥, 간단하게 아래처럼 하면 되지 않을까요?

</p>

<p>$urlParts = explode('/', $_SERVER['REQUEST_URI']);</p>

<p>if (in_array('en', $urlParts)) {

    // en 없는 주소로 이동 코드

} else {

    // en 있는 주소로 이동 코드

}</p>

<p>

로그인 후 평가할 수 있습니다

답변에 대한 댓글 3개

웹메이킹
2년 전
답변감사합니다. 알려주신방법으로 해도 계속 메인 페이지로만 전환이 됩니다.
[code]
<?php
// 사용 가능한 언어와 해당 페이지의 경로 설정
$languages = array(
'ko_KR' => array('name' => '한국어', 'root' => '', 'pages' => 'pages/'),
'en_US' => array('name' => '영어', 'root' => 'en/', 'pages' => 'en/pages/'),
// 다른 언어 및 경로 설정 추가
);

// 현재 선택된 언어를 확인
if (isset($_GET['locale']) && array_key_exists($_GET['locale'], $languages)) {
$selectedLanguage = $_GET['locale'];
} else {
// 기본 언어 설정
$selectedLanguage = 'ko_KR';
}

function generateLanguageLink($languageCode) {
global $languages;
$language = $languages[$languageCode];
return '/' . $language['root'] . '?locale=' . $languageCode;
}

<div style="text-align: right;margin-right:30px;">
<a href="<?php echo generateLanguageLink($code); ?>" style="margin-right: 10px;"><img src="/en/img/ko_KR-ic.jpg" alt="한국어" style="width:34px;height:21px;"> <?php echo $name; ?></a>
<a href="<?php echo generateLanguageLink($code); ?>"><img src="/en/img/en_US-ic.jpg" alt="영어" style="width:27px;height:17px;"> <?php echo $name; ?></a>
<?php endforeach; ?>
</div>
?>
[/code]
이렇게 수정해봤습니다
s
sinbi
2년 전
$_SERVER['REQUEST_URI'] 로 현재 주소 파악해서 strstr 함수로 /en/ 있는지 검사해서 있으면 str_replace함수로 없애버리고, 없으면 /en/ 해당하는 코드를 넣어주시면 되지 않을까요. en 으로 시작하는지 여부만 판별하니까, $_SERVER['REQUEST_URI'] 전체가 아니라 이것의 앞 몇글자로만 판별하시면 될 듯...

솔직히 적어주신 코드는 어떻게 동작하는지 감이 잘 안 오네요. ㅎ
독립변수로 넣는 $code 값이 어디서 오는지 모르겠어요.
웅프
2년 전
function generateLanguageLink($languageCode, $pageContext = '') { global $languages; $language = $languages[$languageCode]; return '/' . $language['root'] . $language['pages'] . $pageContext . '?locale=' . $languageCode; }

이렇게 수정 해주시고

회사 소개 페이지 에서 링크를 해주시면 될것 같은데요;;

<a href="<?php echo generateLanguageLink($code, 'about'); ?>"> <img src="/en/img/ko_KR-ic.jpg" alt="한국어" style="width: 34px; height: 21px;"> <?php echo $name; ?> </a>

댓글을 작성하려면 로그인이 필요합니다.

2년 전

rewrite 를 사용 중일 경우 $_SERVER['PHP_SELF'] 로 올바른 경로를 잡아내지 못할 수 있습니다.

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인