Самый эффективный способ создать шаблон многоязычного сайта

StackOverflow https://stackoverflow.com/questions/1224890

  •  22-07-2019
  •  | 
  •  

Вопрос

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

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

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

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

Любые другие предложения будут оценены по достоинству

Это было полезно?

Решение

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

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

/
  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, вы можете проверить геоIP.

Другие советы

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

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

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

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.
Это означает, что затронутые строки поступают, например. из заявления эха, не внутри < ? php? > теги.
Также, контент, поступающий с php, включает в себя IS. Но НЕ внешний CSS или JavaScript.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top