Самый эффективный способ создания шаблона многоязычного сайта - PullRequest
4 голосов
/ 04 августа 2009

Я создаю англо-французский веб-сайт, и мне было интересно, есть ли лучшая практика для такой работы.

  1. Дублирование сайта и создание папки на французском и английском языках с соответствующим сайтом внутри.

  2. Использование PHP для замены содержимого тегами html. например. если ($ Ланг == 'ан'):

  3. Используйте php, чтобы поменять местами только содержимое, оставляя html-теги одинаковыми для обоих. например. если заявления повсюду. Это будет плохо для эффективности?

Буду признателен за любые другие предложения

Ответы [ 4 ]

5 голосов
/ 04 августа 2009

У нас есть структура для того, когда (если) наш сайт выходит на международный уровень и работает следующим образом ...

Структура папок;

/
  lang/
    english/
      images/
      text/
    dutch/
      images/
      text/

Любой текст или изображения, относящиеся к конкретному языку, удаляются со страницы напрямую и заменяются константами. Например, на экране входа в систему мы заходим;

echo TEXT_LOGIN_WELCOME;

, который определен в /lang/english/text/login.php как;

define('TEXT_LOGIN_WELCOME', 'Welcome, please login:');

но в /lang/dutch/text/login.php он определен как;

define('TEXT_LOGIN_WELCOME', 'Welcome, please login (in dutch):'); 

; -)

Каждый файл определения языка назван точно так же, как и страница, для которой он используется, поэтому при загрузке общедоступной страницы нам нужно только выяснить, на каком языке говорит пользователь, и мы можем включить соответствующий файл определения языка. .

Хорошо в этой системе то, что вся информация о языке централизована. Когда вам нужно добавить новый язык, просто скопируйте основную (английскую?) Папку, переименуйте ее, заархивируйте все и отправьте в службу переводов, чтобы творить чудеса. Конечно, недостатком этой системы является обслуживание по мере роста языков и контента ... Если у кого-то есть какие-либо блестящие идеи по этому поводу, я бы с удовольствием их услышал!

Кстати, если вам в конечном итоге потребуется угадать местоположение пользователя по IP, вы можете проверить geoIP .

4 голосов
/ 04 августа 2009

Используйте систему шаблонов. Smarty Template Engine , пожалуй, один из самых известных PHP. Мало того, что система шаблонов служит именно той цели, которую вы пытаетесь достичь, она также значительно упрощает обслуживание страниц, отделяя код отображения от содержимого (что также позволяет вам использовать один и тот же шаблон для множества различных страниц содержимого схожий характер).

2 голосов
/ 04 августа 2009

Как самый простой способ я рекомендую вам использовать i18n метод интернационализации & gettext каталоги (.po файлы).
Знаменитый WordPress проект , использующий его также .

0 голосов
/ 01 января 2012

1 - Дублирование всего сайта заставит вас повторять каждый штрих кода в 2 папках: - [

2 - Если вы имеете в виду somenting, как

<?php if($lang=='en') { ?>  
  <p>English text</p>  
<? } else { ?>  
  <p>Text français</p>  
<? } ?>

Это решение идеально подходит для управления двумя языками на одной странице.
Но у вас все еще есть дублированные теги.

3 - Изменить только содержание, которое действительно удовлетворяет.
Может быть, из-за того, что заявления могут помешать компиляции php ... Я не знаю.
В любом случае документ может быть более лаконичным при таком подходе:

<?php            
  function interpreter($buffer) {
    $pieces = explode('#', $buffer);

    if (isset($_GET['lang'])) $begin=$_GET['lang'];
    else $begin = 1;  // 1 to display français, 2 to display english

    $tot = count($pieces);          

    for ($i=$begin; $i<$tot; $i+=3) {  // remove one language
    unset($pieces[$i]); }

    foreach ($pieces as $value) {  // recompose the text
    $output .= $value; }

    return $output;
  }

  ob_start("interpreter");      
?>

<a href="?lang=#1#2#">#Français#English#</a>
<p>#English text#Texte français#.</p>

<?php ob_end_flush() ?>

Текст между ob_start и ob_end_flush анализируется ПОСЛЕ компиляции php.
Это означает, что затронутые строки поступают, например. из выражения echo, а не внутри тегов <? php?>.
Также контент, поступающий с php, включает в себя IS.
Но НЕ внешний CSS или JavaScript.

Держите разделитель внимания # не является символом, который еще используется в другом месте.
Может быть, вы предпочтете заменить на || или ^^

Конечно, в будущем вы можете адаптировать это решение на 3 или более языков. Но если вам нужно вставить «перевод на третий язык» во многие строки большого сайта, возможно, решение от MatW подойдет вам.

...