2009-09-28 3 views
1

현재 PHP를 사용하여 gettext로 국제화를하고 있습니다. 이 예의 경우 좋은 방법이 있는지 궁금합니다.gettext에서 링크가있는 텍스트를 만드는 좋은 방법은 무엇입니까?

By using this website, you accept the <a href="<?php print($dir); ?>/tos/">Terms of Use</a>. 

en_US의 경우이 문장은 다음 형식을 따릅니다. 그러나 다른 언어에서는 "Terms of Use"링크가 문장의 시작 부분에있을 수 있습니다. 이것을 할 수있는 우아한 방법이 있습니까? 시간 내 줘서 고마워.

답변

0

다음은 어떻게 수행할까요? 번역 할 문구는 다음과 같습니다.

By using this website, you accept the <a>Terms of Use</a>. 

그런 다음 문구가 현지화 된 후 링크를 ​​바꾸십시오. 물론

$str = _('By using this website, you accept the <a>Terms of Use</a>.'); 
$str = preg_replace('#<a>(.*?)</a>#', '<a href="' . $dir . '/tos/">$1</a>', $str); 

당신이 무엇에 <a></a>를 대체 할 수있는 당신과 당신의 번역에 의미가 있습니다. 당신이 (고의 또는되지 않음) HTML로 어질러에서 번역을 방지하기 위해 출력을 탈출해야하기 때문에 단순히거야, 아마 간단한 국제화

$str = htmlspecialchars(_('By using this website, you accept the [tos_link]Terms of Use[/tos_link].')); 
$str = preg_replace('#\\[tos_link\\](.*?)\\[/tos_link\\]#', '<a href="' . $dir . '/tos/">$1</a>', $str); 
+1

영리한 정규식이지만 ... 이제 두 가지 문제가 있습니다. http://www.codinghorror.com/blog/archives/001016.html –

+0

글을 읽었습니다 ... 두 가지 문제점은 무엇입니까? : p – axsuul

+0

내가 이것을 적용했는데 잘됐다! 감사합니다 – axsuul

1

같은 것을 함께 가고 싶어 그것을 생각 해 보 니, 언어마다 배열을 만들고, 적절한 파일을 포함하고,하고있는 일을하는 대신 배열에 액세스하십시오.

en.php :

$text = array(
    'footer' => 'By using this website, you accept the <a href="' . $dir . '/tos/">Terms of Use</a>.', 
    'welcome' => 'Welcome to our website!' 
); 

의 index.php :

$langdir = '/path/to/languages'; 
$lang = ($_GET['lang']) ? $langdir . '/' . $_GET['lang'] . '.php' : $langdir . '/en.php'; 
if(dirname($lang) != $langdir || !require_once($lang)) 
    exit('Language does not exist'); 

echo '<p class="footer">' . $text['footer'] . '</p>'; 

dirname() 호출이 중요하다; 그렇지 않으면 사용자는 파일 시스템의 모든 php 파일에 접근 할 수 있습니다.

+0

몇 가지 보안/방탄 업데이트를했습니다. –

+0

그 질문을 한 사람은 이미 gettext를 사용하고 있으며 다른 시스템, 특히 열등한 시스템으로 전환하려고하지 않습니다. 번역자가 PHP 파일을 편집 할 때 번역 및 보안 문제로 가득 찬 큰 PHP 파일을 사용할 때 많은 결함이 있습니다. 다른 말로하면, 변형 된 문자열은 스크립트를 종료 할 수 있습니다. 특히 변수가 포함 된 변환의 경우에는 시스템에서 파일을 포함하기 전에 가능한 모든 변수를 알아야합니다. gettext는 검증 된 방법이므로 육각형 휠을 다시 만들 필요가 없습니다. –

관련 문제